1

実行可能ファイルの実行中に動的にロードされる特殊な共有ライブラリがあります。このライブラリは、関数を提供しますb()。この関数は、関数を呼び出しますa()

関数はaライブラリ自体ではなく実行可能ファイルで定義されているため、実行可能ファイルのコードの一部をライブラリから呼び出すことができるようにしたいと考えています。フラグを使用して-undefined dynamic_lookup、clang が遅延バインディングのためにこれらのシンボルを残すようにすることができましたが、実行可能ファイルを実行しようとすると、まだ dyld が文句を言います。

dyld: lazy symbol binding failed: Symbol not found: _a
  Referenced from: /usr/local/lib/myLib.dylib
  Expected in: flat namespace

このシンボルをリンクするにはどうすればよいですか?

4

1 に答える 1

0

結局のところ、これは Xcode がデフォルトでシンボルをエクスポートしないことが原因でした。これは、LLVM コード生成ビルド設定の下にある [デフォルトで非表示のシンボル] オプションを変更することで修正できます。-fvisiblity=hiddenXcode を使用していない場合、コマンド ラインでフラグを使用するかどうかを制御します。

または、このオプションをオンのままにして、エクスポート__attribute__((visibility("default")))する関数に属性を追加することにより、シンボルを選択的にエクスポートすることもできます。

于 2013-02-03T19:56:00.790 に答える