2つの共有ライブラリliba.soとlibb.so。 liba.soはlibb.soを使用します。すべてのcファイルは-fPICでコンパイルされます。リンクは-sharedを使用します。 liba.soでdlopenを呼び出すと、libb.soでシンボルが見つかりません...「undefinedsymbol」エラーが発生します。エラーなしでlibb.soをdlopenできます。ファイルが見つからないというエラーが発生しないため、libaがlibbを検出していることがわかります。 libb.soを削除すると、ファイルが見つかりませんというエラーが発生します。 -lutilを試しましたが、運がありませんでした。
何か案は????
そうそう。 gcc 4.1.2
更新:libaをリンクするときにrpathを使用して、libbを見つけられるようにします。
ldd liba.soは以下を返します:
linux-gate.so.1 => (0xffffe000)
libb.so => ./libb.so (0xf6ef9000) <-------- LIBB
libutil.so.1 => /lib/libutil.so.1 (0xf6ef5000)
libdl.so.2 => /lib/libdl.so.2 (0xf6ef1000)
libm.so.6 => /lib/libm.so.6 (0xf6ec9000)
libpthread.so.0 => /lib/libpthread.so.0 (0xf6eb1000)
librt.so.1 => /lib/librt.so.1 (0xf6ea8000)
libc.so.6 => /lib/libc.so.6 (0xf6d62000)
/lib/ld-linux.so.2 (0x007d0000)
libbの最後に。#がないことは重要ですか?
すべてのオブジェクトとライブラリをリンクして実行可能ファイルを生成するときは、ライブラリの順序(すべての-lxxx引数)が(少なくともgccでは)重要であることを忘れないでください。
短い例:
LIBS = -L。 -ltest1 -ltest2
OBJS = code1.o code2.o
gcc $(LIBS)$(OBJS)-o mysoft
場合によっては失敗する可能性がありますが、
gcc $(OBJS)-o mysoft $(LIBS)
しません