1

我有一个静态库,它的代码是 C++。我想在一个客观的 C 应用程序中使用它。

(我之前一直在使用 C 库,它们运行良好。)

我添加了库并尝试构建,但无法构建,因为头文件中使用了“命名空间”和向量。因此,我不得不将目标 C 文件的类型更改为目标 c++。(我没有将扩展名更改为 .mm)。由于该文件将包含在另一个文件中,因此该文件也必须更改为 c++,对于其他几个文件也是如此。

现在没有命名空间错误。但是现在当我构建时,它找不到引用的符号。我现在把扩展名改成了.mm,还是一样。我做了一些搜索,我读了一些关于 mangling 的东西。我不明白那是什么,但这是我尝试过的东西,

我没有直接调用 c++ 函数,而是创建了一个 C 函数,它的声明前面有 'extern "C"',并且库调用存在于这个 C 函数中。还是一样。我通过'extern“C”'在c函数的实现之前,仍然是一样的。

我还读到如果 xcode 看到 .mm 扩展名,那么它才会使用 g++ 编译器。在这种情况下,不需要 extern "C"。是吗?

我是否需要在其他编译器标志目标设置中添加一些编译器标志?

ld: warning: directory not found for option '-F-F/Users/username/Desktop/projectFolder'
Undefined symbols for architecture armv7:
  "IIS::Image::Image::Image(unsigned int, unsigned int, ImageFormat)", referenced from:
      -[ImageEditorSupport loadToolKitForImage:width:height:length:] in ImageEditorSupport.o
  "IIS::Image::Image::getNumComponents(unsigned int&) const", referenced from:
      -[ImageEditorSupport loadToolKitForImage:width:height:length:] in ImageEditorSupport.o
  "IIS::Image::ToolKit::adjustSaturation(IIS::Image::Image const&, unsigned int, IIS::Image::Image&)", referenced from:
      -[ImageEditorSupport applyToolkitForEditID:intensity:] in ImageEditorSupport.o
  "IIS::Image::ToolKit::adjustContrast(IIS::Image::Image const&, unsigned int, IIS::Image::Image&)", referenced from:
      -[ImageEditorSupport applyToolkitForEditID:intensity:] in ImageEditorSupport.o
  "IIS::Image::Image::Image(unsigned int, unsigned int, ImageFormat, void*, unsigned int)", referenced from:
      _create_image_using_buffer in ImageEditorSupport.o
  "IIS::Image::ToolKit::adjustColorTemp(IIS::Image::Image const&, int, IIS::Image::Image&)", referenced from:
      -[ImageEditorSupport applyToolkitForEditID:intensity:] in ImageEditorSupport.o
ld: symbol(s) not found for architecture armv7
clang: error: linker command failed with exit code 1 (use -v to see invocation)

我还检查了几次,我添加了正确的库搜索路径。我对这两个'-FF'表示怀疑。我只期待一个。

*编辑: *在警告-F-F/Users/username/Desktop/projectFolder中是否意味着它正在搜索路径-F/Users/username/Desktop/projectFolder而不是/Users/username/Desktop/projectFolder?那额外的东西怎么会-F来?

4

2 回答 2

1

UIViewController您使用该库的地方应该c++有扩展名(默认)。你现在也应该.mm.mmain.mmain.mm

这是因为您c++Objective-c.

于 2012-10-10T10:57:22.273 回答
1

似乎它还没有为 armv7 架构编译。你可以检查 lipo -info myLib.a

于 2012-10-10T10:51:33.757 回答