2

プロジェクト内のいくつかの動的ライブラリを scons にリンクしたいと考えています。

例:

ソース/main.cpp

ツール/lib/libboost_system.dylib

バイナリの場所

ソース/プログバイナリ

私の問題は、リンク プロセスの後、バイナリが libboost_system.dylib を見つけられないことです。

dyld: ライブラリがロードされていません: libboost_system.dylib

otool -L問題を示します。パスを修正する小さなスクリプトでこれを修正できます。しかし、私はsconsでこれをやりたいです。

RPATHLinux では、 in sconsを設定するだけで本当に簡単です。

----- @Brady からのヒントの後

ライブラリに Linkflags を追加します。リンクした後、エラーが発生しました

「g++: エラー: -install_name は -dynamiclib でのみ許可されています」

だから私はコマンドに追加します

LINKFLAGS = '-dynamiclib インストール名 @executable_path/libWhatever.dylib'

そして今、私が私の実行を呼び出すと、メッセージを取得します

「バイナリファイルを実行できません」

otool -L

見せて:

@executable_path/tools/lib/libboost_filesystem.dylib (互換バージョン 0.0.0、現行バージョン 0.0.0) libboost_system.dylib (互換バージョン 0.0.0、現行バージョン 0.0.0)

scons からのリンク コマンドは次のようになります。

/opt/local/bin/g++ -o source/prog -dynamiclib -install_name @executable_path/tools/lib/libboost_system.dylib source/main.o -Ltools/lib -lboost_system

4

1 に答える 1

2

上記のtrojanfoeによるコメントによると: scons dylib dynamic linking on mac

以下をリンカーに渡す必要があります。

-install_name @executable_path/libWhatever.dylib

これは、SCons で次のように実行できます。

env = Environment()
env.Append(LINKFLAGS = ['-install_name @executable_path/libWhatever.dylib'])

動的 (共有) ライブラリをコンパイルする必要がある場合は、SharedLibrary() builderを使用して実行できます。

于 2013-10-29T10:10:58.357 に答える