1

背景は、プロジェクトが異なる GCC バージョン ( ABI は互換性がない可能性があります) で動作する必要があり、GCC のいくつかのバージョンがビルド サーバーにインストールされていることです。ラッパー プロジェクトを使用しLD_LIBRARY_PATHて環境を設定、準備しexport LD_LIBRARY_PATH=/path/to/gcclib/、ラッパー スクリプト内でアプリケーションを起動します。

さまざまな種類の gcc/g++ が使用されているため、 libstdc++.soがリンクされている暗黙的なライブラリ パスを取得する簡単な方法があるかどうかを知りたいと考えています。たとえば、GCC ツールの 1 つが/opt/gcc4/gcc4.7/bin/g++にインストールされ、libstdc++.so が/opt/gcc4/gcc4.7/lib/にある場合、別の GCC バリアントが見つかる場合があります。/usr/local/bin/g++および/usr/lib/libstdc++.soにあります。

4

1 に答える 1

1

CMAKE_{C,CXX}_COMPILERvarsを設定するときに絶対パスを指定していると思います。この場合、これを使用してライブラリディレクトリを取得できます。

get_filename_component(GCC_PATH ${CMAKE_C_COMPILER} PATH)
#now ${GCC_PATH} contains "/opt/gcc4/gcc4.7/bin", for example
set(LIBSTD_PATH "${GCC_PATH}/../lib")

システムコンパイラの場合、次のifステートメントを使用できます。

if(GCC_PATH STREQUAL /usr/local/bin)
set(LIBSTD_PATH "/usr/lib")
endif()
于 2012-11-09T06:31:14.370 に答える