在objectivec中使用c++静态库

using c++ static library in objective c

本文关键字:c++ 静态 objectivec      更新时间:2023-10-16

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

(我以前一直在使用C库,它们运行得很好。)

我添加了这个库并试图构建,但它不能,因为头文件中使用了"namespace"和向量。因此,我不得不将目标C文件的类型更改为目标C++。(我没有把扩展名改为.mm)。由于这个文件要包含在另一个文件中,所以这个文件也必须改为c++,其他一些文件也是如此。

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

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

我还读到,如果xcode看到.mm扩展,那么它只使用g++编译器。在这种情况下,不需要外部的"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"表示怀疑。我只期待一个。

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

似乎还没有针对armv7体系结构进行编译。你可以查看lipo-infomyLib.a

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

这是因为您在Objective-c中使用c++代码。