gcc 4.9.2(libstdc++.so.6.0.20)を使用してプロジェクトを構築しました。 gcc 4.6.3(libstdc++.so.6.0.16)がインストールされている仮想マシンでプログラムを実行するには、ビルドマシンと同じバージョンのlibstd ++ / libcを提供する必要があります。私は次のステップに従いました。
- LD_LIBRARY_PATHのエクスポート(正しいカーネルバージョンとlibstdc ++を使用したカスタムglibcの構築)
- 次のコマンドを実行します。 LD_DEBUG=libs LD_PRELOAD=/path_to_custom_glibc/ld-linux-x86-64.so.2 myApp
プログラムに通知する出力を取得します。init:/path_to_custom_glibc/libpthread.so.0 を呼び出します。
何が間違っている可能性がありますか?
編集1 コアダンプは分割エラーが発生した場所を表示しませんが、LD_DEBUG = allはLD_DEBUG = libsよりも正確な情報を返します。
Symbol = __libc_dl_error_tsd;
file=/path_to_custom_glibc/libc.so.6[0] から検索 3539: ファイル /path_to_custom_glibc/libpthread.so.0[0] を /path_to_custom_glibc/libc.so.6[0] にバインド: 一般記号 ` __libc_dl_error GLIBC_PRIVATE]分割エラー(コアダンプ)