2011-11-16 46 views
1

新手-問題:Xcode中:如何鏈接預編譯的C++庫

我有一個小的測試類(TestLibMain.cpp)在C++中它編譯成位於一個「libTestLib.dylib」包含TestLibMain.h文件的目錄的子目錄「debug」。

如何從我的Xcode項目中使用dylib?我在我的代碼中導入了TestLibMain.h,並在構建設置中設置了標題搜索路徑。這工作正常。但是現在鏈接器告訴我他找不到dylib(也就是他自己編譯的「TestLibMain.cpp」文件...)。在Ecplise/CDT中創建的dylib具有不同的名稱:「libTestLib.dylib」。設置在Xcode的「庫搜索路徑」沒有幫助....

這是我的錯誤信息:

Undefined symbols for architecture i386: 
    "TestLibMain::TestLibMain()", referenced from: 
     -[tbViewController viewWillAppear:] in tbViewController.o 
    "TestLibMain::getNumber()", referenced from: 
     -[tbViewController viewWillAppear:] in tbViewController.o 
ld: symbol(s) not found for architecture i386 
clang: error: linker command failed with exit code 1 (use -v to see invocation) 

問題:

  1. 是否有可能鏈接dylib文件在Xcode中爲i386創建?我想在Eclipse中的一個項目中使用Xcode項目編譯的庫(我想在Android NDK中重用...)
  2. 我該如何讓Xcode找到dylib文件?
  3. 其實dylib文件是正確的文件鏈接?沒有.a文件由eclipse創建,但.d和.o文件?

回答

3

1.如果您在iOS項目中使用dylib - 這是不可能的,因爲Apple不允許使用自定義動態庫。即使用於相同體系結構,也不能使用使用NDK構建的庫,因爲它們具有不同的二進制格式(Mac OS和iOS使用Mach-O,Android使用ELF)。

2.進入你的目標首選項 - >構建phases->按「+」 - >添加其他

3.dylib是正確的文件,除非它不是在iOS項目。

+0

感謝您的回答!所以在我的iOS項目中不可能有任何預編譯的庫文件?那麼將通用源代碼直接包含到我的iOS(和我的Android)項目中似乎會更好。 –

+0

您可以爲iOS項目使用靜態庫。 – Max

+0

Hello Max,謝謝你的回答。我知道在Eclipse(* .a文件)中編譯了一個靜態庫,但我得到了相同的消息。將嘗試找出我可以在哪裏調整二進制格式... –