ターゲット マシン上の glibc のバージョンはほとんど予測できないため、プログラムを静的に glibc にリンクしようとしています。リンカー フラグ -static-libgcc および -static-libstdc++ を使用したところ、問題なく動作しました。実行可能ファイルは大きいですが、私はそれで十分です。残念ながら、ターゲット マシン (以下の例では「mytest」という名前) で実行可能ファイルを実行すると、次のエラーが発生します。
./mytest: /usr/lib64/libstdc++.so.6: version `GLIBCXX_3.4.11' not found (required by libboost_log.so.1.53.0)
./mytest: /usr/lib64/libstdc++.so.6: version `GLIBCXX_3.4.15' not found (required by libboost_log.so.1.53.0)
./mytest: /usr/lib64/libstdc++.so.6: version `GLIBCXX_3.4.9' not found (required by libboost_log.so.1.53.0)
./mytest: /usr/lib64/libstdc++.so.6: version `GLIBCXX_3.4.15' not found (required by libboost_date_time.so.1.53.0)
./mytest: /usr/lib64/libstdc++.so.6: version `GLIBCXX_3.4.9' not found (required by libboost_thread.so.1.53.0)
mytestで「strings」を実行すると、
$ strings mytest | grep GLIBC
GLIBC_2.9
GLIBC_2.7
GLIBC_2.8
GLIBC_2.3.2
GLIBC_2.2.5
GLIBCXX_3.4.15
GLIBCXX_3.4.11
GLIBCXX_3.4.14
GLIBCXX_3.4.9
GLIBCXX_3.4
つまり、静的リンクが正常に機能していたと思います。ローダーが共有 glibc および libstdc++ で関数を検索しようとするのはなぜですか? 私は何を間違っていますか?
ありがとう!