2011-11-16 21 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文件)中编译了一个静态库,但我得到了相同的消息。将尝试找出我可以在哪里调整二进制格式... –