2011-06-30 6 views
2

Mac OS X上で共有Cライブラリ(dylib)を関数を追加して拡張したいと考えています。関数const char *get_string(void)を呼び出してみましょう。Mac OS X:関数を追加して共有ライブラリを拡張する

私はget_string(void)関数を含む新しい共有ライブラリを作成し、拡張したいライブラリに対してそれを好きでした。ライブラリラッパーが話すように。ここまでは順調ですね。次のステップは、新しい拡張ライブラリとアプリケーションをリンクすることですが、拡張ライブラリはシンボル_get_stringのみをエクスポートし、元のライブラリのシンボルはエクスポートしないという問題があります。そのため、(元のライブラリの代わりに) "拡張"ライブラリとリンクすると、未解決のシンボル警告/エラーが発生します。

元のライブラリのシンボルをすべてエクスポートする方法はありますか(多くあります)、または問題を解決するためのより良い方法がありますか?基本的には、既存のライブラリを拡張したいだけです。私は元のライブラリのソースにアクセスできますが、私はそれを再コンパイルすることはできません。

ありがとうございます!

答えて

2

ldにこのオプションについてどのように:

 -reexport-lx 
      This is the same as the -lx but specifies that the all symbols in library x should 
      be available to clients linking to the library being created. This was previously 
      done with a separate -sub_library option. 
+0

タンク、いいですね、それは私のために動作しません。私はXcodeを使用し、libparent.dylibを拡張する必要がある "-L/usr/local/lib -reexport-lparent"に "Other Linker Flags"というプロパティを設定します。 libtoolがreexportフラグを渡していないようです。親ライブラリはリンクされていません。何か提案はありますか? – Benjamin

+0

sub_libraryフラグは認識されますが、nmは依然として親ライブラリのシンボルをリストしません。 – Benjamin

+0

sub_libraryフラグは完全に機能します。 – Benjamin