0

2 つの C 静的ライブラリがlibAありlibB、実行可能ファイルに対してリンクしていますE

libAにある関数を呼び出す関数がありますlibB:

myLibAFunctionThatCallsAfunctionInLibB( ... )
{ libB_function(...); }

どちらのライブラリも正常にコンパイルされます。私の実行可能ファイルEも正常にコンパイルされます。適切なおよびパスのフラグをE使用して gcc でコンパイルされます。-lA -lB-I-L

myLibAFunctionThatCallsAfunctionInLibBが呼び出されると、実行時に問題が発生します。次のエラーが表示されます。

dyld: lazy symbol binding failed: Symbol not found: _libB_function
  Referenced from: libA.dylib
  Expected in: flat namespace

すべてのアーキテクチャが同じであることを確認しました (i386)。が実際に の一部であることもnm -a libB.a示しています。as inと宣言してみましたが、違いはありませんでした。それが発生した場合、私はosx 10.6でgcc 4.2.1を使用しています。libB_functionlibBlibB_function(...);externlibA

私がやろうとしている方法でライブラリを相互参照することは不可能ですか? ライブラリlibB_functionにの実装コードを含める必要がありますか?libA

ありがとう

ババ

4

1 に答える 1

0

わかりました回避策を見つけました。libA ではなく libB で関数を書き直しました。つまり、libA から libB を呼び出すのではなく、libB から libA を呼び出すようになりました。この場合、機能します。libA が動的にロードされたライブラリであり、B が静的であるという事実に関係していると思いますが、その理由はわかりません。どんなエキスパートライトも歓迎します。

ありがとう。

于 2010-10-06T18:32:04.943 に答える