在objectivec中使用c++静态库
using c++ static library in objective c
我有一个静态库,它的代码是用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++
代码。
- 如果C++类在类方法中具有动态分配,但没有构造函数/析构函数或任何非静态成员,那么它仍然是POD类型吗
- #为""定义宏;静态";针对不同的上下文
- cmake如何在fedora工作站中找到boost静态库包
- 静态数据成员的问题-修复链接错误会导致编译器错误
- 将公共但非静态的成员函数与ALGLIB集成
- cmake在我的项目中所需的所有静态库都不成功
- C++从另一个类访问公共静态向量的正确方法是什么
- 基于boost的程序的静态链接——zlib问题
- 在静态库中嵌入类方法
- Qt C++静态thread_local QNetworkAccessManager是线程应用程序的好选择吗
- 如何在C++中获得"静态纯虚拟"功能?
- 私有类型的静态常量成员
- 使用gcc从静态链接的文件中查找可选符号
- 在 .h 文件中的类中声明静态变量和在.cpp文件中声明"global"变量有什么区别
- 如何在C++中使用非静态成员函数作为回调函数
- 将静态库链接到不带-fPIC的共享库中
- 静态结构和一个定义规则
- 为什么虚函数不能是静态的和全局的?
- C++17中函数模板中的静态数组初始化(MSVC 2019)
- 停止cmake target_link_libraries将插件中静态库的两个对象文件链接到静态库本身