不足しているライブラリを調べて修正したり、互換性のないライブラリをスキップしたりする方法は?

不足しているライブラリを調べて修正したり、互換性のないライブラリをスキップしたりする方法は?

CentOS 6.5用にパッケージ化された秘密のストレージがあります。 CentOS 7.4用のパッケージをビルドできません。次の行で make install が失敗します。

$ gcc -static -O3 -Wno-long-long -funroll-loops -Wall -g -DLINUX testlib.c -o test-lib -L. -llsh -lstdc++

/usr/bin/ld: cannot find -lstdc++
/usr/bin/ld: cannot find -lc

私はこれを調べてみました。たとえば、次のようになります。

$ ld -lstdc++ --verbose
...
attempt to open /usr/x86_64-redhat-linux/lib64/libstdc++.so failed
attempt to open /usr/x86_64-redhat-linux/lib64/libstdc++.a failed
attempt to open /usr/lib64/libstdc++.so failed
attempt to open /usr/lib64/libstdc++.a failed
attempt to open /usr/local/lib64/libstdc++.so failed
attempt to open /usr/local/lib64/libstdc++.a failed
attempt to open /lib64/libstdc++.so failed
attempt to open /lib64/libstdc++.a failed
attempt to open /usr/x86_64-redhat-linux/lib/libstdc++.so failed
attempt to open /usr/x86_64-redhat-linux/lib/libstdc++.a failed
attempt to open /usr/local/lib/libstdc++.so failed
attempt to open /usr/local/lib/libstdc++.a failed
attempt to open /lib/libstdc++.so failed
attempt to open /lib/libstdc++.a failed
attempt to open /usr/lib/libstdc++.so failed
attempt to open /usr/lib/libstdc++.a failed
ld: cannot find -lstdc++

いくつかのパスを見た後、私は次のことを見つけました:/usr/lib/libstdc++.so.6シンボリックリンクを作成しましたが(これをだまそうとしましたが)、別のエラーが発生しました。

$ sudo ln -s /usr/lib/libstdc++.so.6.0.19 /usr/lib/libstdc++.so

$ ld -lstdc++ --verbose
...
attempt to open /usr/x86_64-redhat-linux/lib64/libstdc++.so failed                                                                                                                                                 
attempt to open /usr/x86_64-redhat-linux/lib64/libstdc++.a failed                                                                                                                                                  
attempt to open /usr/lib64/libstdc++.so failed                                                                                                                                                                     
attempt to open /usr/lib64/libstdc++.a failed            
attempt to open /usr/local/lib64/libstdc++.so failed                                                     
attempt to open /usr/local/lib64/libstdc++.a failed                            
attempt to open /lib64/libstdc++.so failed                                    
attempt to open /lib64/libstdc++.a failed           
attempt to open /usr/x86_64-redhat-linux/lib/libstdc++.so failed
attempt to open /usr/x86_64-redhat-linux/lib/libstdc++.a failed                                          
attempt to open /usr/local/lib/libstdc++.so failed                                                       
attempt to open /usr/local/lib/libstdc++.a failed   
attempt to open /lib/libstdc++.so succeeded         
ld: skipping incompatible /lib/libstdc++.so when searching for -lstdc++                                                           
attempt to open /lib/libstdc++.a failed             
attempt to open /usr/lib/libstdc++.so succeeded                          
ld: skipping incompatible /usr/lib/libstdc++.so when searching for -lstdc++
attempt to open /usr/lib/libstdc++.a failed                                                              
ld: cannot find -lstdc++

CentOS 6.5:

$ gcc --version
gcc (GCC) 4.4.7 20120313 (Red Hat 4.4.7-4)

CentOS 7.4:

$ gcc --version
gcc (GCC) 4.8.5 20150623 (Red Hat 4.8.5-16)

この問題を解決するのに役立ちます。また、そのような問題を調査する方法についてのアドバイスを期待しています。

ベストアンサー1

インストールしてみてください:

  • libstdc++-静的
  • glibc 静的

Redhat 7 / CentOS 7以降、静的ライブラリはオプションのパッケージに移動されました。 CentOS 6では、次の一部です。

  • libstdc++-開発
  • glibcの開発

おすすめ記事