古い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


C++11 機能、gcc 4.8 でコンパイル

? 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 }


関連情報