0

共有ライブラリを参照する Linux 実行可能ファイルをリンクしています。

g++ Debug/file.o Debug/MyLib.so -o Debug/MyApp -Wl,--rpath='$ORIGIN'

問題は、生成された MyApp ファイルが「Debug/MyLib.so」を参照しているため、Debug ディレクトリから実行しても見つからないことです。したがって、-Wl,--rpath='$ORIGIN' を指定しても役に立ちません。

GNU LD に 'Debug/MyLib.so' ファイルを使用するように指示する方法はありますが、実行可能ファイル内に単に 'MyLib.so' として記録しますか?

4

2 に答える 2

1

ライブラリの名前を変更したくない場合は、作成時にsonameオプションを使用できます。

例えば:

ライブラリを構築する

$> g++ -fpic -c mylib.cpp 
$> g++ -shared -o subdir/mylib.so mylib.o -Wl,-soname=mylib.so

プログラムをビルドする

g++ -o subdir/main main.cpp -Lsubdir -l:mylib.so -Wl,-rpath='$ORIGIN'

( -lオプションの後のコロンを忘れないでください)

于 2013-01-27T21:57:18.603 に答える
0

共有ライブラリに対して不適切にリンクしています。ライブラリの名前を libMyLib.so に変更し、次を使用して実行可能ファイルをリンクする必要があります。

g++ Debug/file.o -o Debug/MyApp -Wl,--rpath='$ORIGIN' -LDebug -lMyLib

は、リンク時にライブラリ-LDebugのディレクトリを検索し、指定されたパスと標準ライブラリ検索パスで(または)という名前のライブラリを検索します。Debug-lMyLiblibMyLib.solibMyLib.a-L

linux/unix でのライブラリの標準命名規則はlibLibraryNameであり、リンカは、 を使用してライブラリへのリンクを要求したときに-l、その名前の接頭辞が付いたファイルを探す必要があることを認識していますlib。以前の形式で使用すると、実際には絶対ライブラリが記録されました。これは、ライブラリの名前を記録するだけの通常のメカニズムではなく、ライブラリへのパスを解決するために実行パスに依存するのではなく、リンク時に使用されました。

于 2013-01-27T21:18:10.437 に答える