使用客观C C ++静态库(using c++ static library in objectiv

2019-10-17 07:30发布

我有一个静态库,它的代码是用C ++。 我想在一个目标C应用程序来使用它。

(我一直在使用C库蛔虫,他们一直在正常工作。)

我加了库,并试图打造,它不能因为“命名空间”和载体某处头文件使用。 于是,我只好我的目标C文件的类型更改为目标的C ++。 (我没有改变扩展.mm)。 由于这个文件是被包含在另一个文件中,该文件也必须改变,以C ++,同样,对于其他一些文件。

现在还没有命名空间的错误。 但现在当我建,它CRIBBS它不能找到引用的符号。 我现在改变了扩展.mm,还是一样。 我做了一些搜索,我读到压延一些事情。 我不明白那是什么,但这里的东西我试过了,

而不是直接调用C ++函数的,我创建了一个C函数,它的宣言之前由“外部‘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)

我也检查了我加入了正确的库搜索路径几次。 我怀疑这两个“-F-F”。 我只是一个期待。

* 编辑:*在警告-FF/Users/username/Desktop/projectFolder是否意味着它正在搜索的路径-F/Users/username/Desktop/projectFolder而非/Users/username/Desktop/projectFolder ? 额外的怎么可能-F来?

Answer 1:

看来它并没有被编为ARMv7架构。 你可以用脂-info mylib.a上检查



Answer 2:

UIViewController中,你正在使用的c++库应具有扩展名.mm而不是.m (这就是默认值)。 同时您main.m现在应该main.mm

这是因为你使用c++代码Objective-c



文章来源: using c++ static library in objective c