【问题标题】:Xcode: How to link a pre-compiled c++ libraryXcode:如何链接预编译的 C++ 库
【发布时间】:2011-11-16 16:22:40
【问题描述】:

新手问题:

我在 c++ 中有一个小型测试类 (TestLibMain.cpp),并将其编译为“libTestLib.dylib”,该“libTestLib.dylib”位于包含 TestLibMain.h 文件的目录的子目录“debug”中。

如何使用我的 Xcode 项目中的 dylib?我在代码中导入了 TestLibMain.h,并在构建设置中设置了 Header-search 路径。这工作正常。但是现在链接器告诉我他找不到dylib(也找不到他可以自己编译的“TestLibMain.cpp”文件......)。在 Ecpise/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. 是否可以在 Xcode 中链接为 i386 创建的 dylib 文件?我想在 Xcode 项目中使用从 Eclipse 中的项目编译的库(我想在 Android NDK 中重用...)
  2. 如何让 Xcode 找到 dylib 文件?
  3. dylib 文件实际上是链接的正确文件吗? eclipse没有创建.a文件,但是有.d和.o文件?

【问题讨论】:

    标签: objective-c xcode4.2 objective-c++ xcodebuild


    【解决方案1】:

    1.如果您在 iOS 项目中使用 dylib - 这是不可能的,因为 Apple 不允许使用自定义动态库。您也不能使用使用 NDK 构建的库,即使它们是针对相同架构的,因为它们具有不同的二进制格式(Mac OS 和 iOS 使用 Mach-O,而 Android 使用 ELF)。

    2.转到您的目标首选项->构建阶段->按'+'->添加其他

    3.dylib 是正确的文件,除非它不是 iOS 项目。

    【讨论】:

    • 感谢您的回答!所以在我的 iOS 项目中根本不可能有任何预编译的库?那么将通用源代码直接包含到我的 iOS(和我的 Android)项目中似乎更好。
    • 您可以为 iOS 项目使用静态库。
    • 你好 Max,谢谢你的回答。我知道在 Eclipse(*.a 文件)中编译了一个静态库,但我得到了相同的消息。将尝试找出我可以在哪里调整二进制格式...
    • 好的,只需要编译带有“-arch i386”标志的库,然后它终于可以工作了。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2022-08-03
    • 2023-04-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-10-22
    相关资源
    最近更新 更多