以前のlibcを使用してC ++ 11ライブラリを実行する

以前のlibcを使用してC ++ 11ライブラリを実行する

私はC ++ 11機能を使用してgcc 4.8、libc 2.18でコンパイルされた共有ライブラリを作成しました。このライブラリは、gcc 4.4.7、libc 2.12を持つクライアントのCentOS 6システムで実行する必要があります。このライブラリには、libc 2.12にはないいくつかのシンボルがあります。 CentOS 6でこのライブラリをどのように使用できますか?ライブラリをコンパイルする方法、場所、コンピュータに柔軟性があるが最終的にパッケージに触れることができないCentOS 6を使用するクライアントで動作する必要があります。 CentOS 6でDevTools-2を使用してコンパイルできますか?それともABI関連の問題がある可能性がありますか?他に提案がある場合はお知らせください。よろしくお願いします。

答え1

実行中のシステムと同じシステムでコンパイルします。リリースバージョンのジャンプ(たとえば、7から8へ)を達成するには、再コンパイルする必要があり、時には再コンパイルする必要があります。

別のコンパイラバージョンを使用している場合可能コンパイラの共有ヘルパーライブラリ、基本CまたはC ++(ほとんど)ライブラリ、またはさまざまな外部依存関係間で非互換性が発生する可能性があります。デバッグしたくありません。台無しではありません。

答え2


gcc 4.8でコンパイルされたC ++ 11機能

?なぜg ++ 4.8ではないのですか?

提案: libstdc++.a を使用してライブラリを静的にコンパイルします。 →C++11 関数は*libstdc++-develglibc ではなく にあるようです。

devtoolset-2-libstdc++-devel-4.8.2は静的ライブラリに付属しています。

/opt/rh/devtoolset-2/root/usr/lib/gcc/x86_64-redhat-linux/4.8.2/{ libstdc++.a, libstdc++_nonshared.a }


関連情報