2009-08-20 11 views
6

lib接頭辞なしで自分のコードを共有ライブラリにリンクする必要があります。 (例えば、foo.so)最初の問題は、-lオプションがファイルを見つけられないことです。だから私は、直接このような最後のコンパイルにこのファイルを含めてみました:別のディレクトリにlib *プレフィックスなしで共有ライブラリにリンクする方法は?

gccのAO /PATH/TO/FOO/foo.so

しかし、この場合には、Aは、ハードとしてfoo.soですにリンクされています、両方のファイルが同じフォルダになってしまうだろうので、これは通常のリンクである必要があり、最終的な展開では

/PATH/TO/FOO/foo.so

:「LDDのA」に見られるように絶対パス絶対パスではありません。これどうやってするの?

+0

が重複する可能性をもlibNAME.so命名規則に従わないライブラリのハードコーディングパス?](http://stackoverflow.com/questions/207069/how-to-link-using-gcc-without-l-nor-hardcoding-path- for-a-library-that-does-not)は、 –

答えて

6

-Wl、-rpath ,. - >現在のディレクトリを使用してlibファイルを検索します。 (コンパイル時に見つからない場合でも、実行時にはok)-llライブラリの代わりに - >ライブラリを使用します。

これは正しく動作するようです。誰もがこれが有用であることを願っています。次善の修正がそれにSONAMEを設定することです - 最高の修正は、単にそれlibfoo.so
に名前を付けることである -

gcc -Wl,-soname,foo.so -o foo.so foo.o 

あなたをあなたがfoo.soを再構築することができれば、ELFのプラットフォームを想定し

12

gcc -o a.out a.o /path/to/foo.so 

のみSONAMEが依存関係ではなく、完全なとして記録されますと、後でリンク。

あなたがfoo.soを再構築することができない場合は、この操作を行います。

rm -f foo.so && ln -s /path/to/foo.so foo.so && 
    gcc -o a.out a.o ./foo.so && rm -f foo.so 
13

をこれが私のために動作します:[-lなしでGCCを使用してリンクする方法の-l:mylib.so

thanks to

関連する問題