2011-06-30 56 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並將屬性「Other Linker Flags」設置爲「-L/usr/local/lib -reexport-lparent」,其中應擴展libparent.dylib。似乎libtool沒有通過再輸出標誌。父庫甚至沒有鏈接。你有什麼建議嗎? – Benjamin

+0

sub_library標誌被識別,但nm仍然沒有列出父庫的符號 – Benjamin

+0

sub_library標誌完美地工作。 – Benjamin