我创建了一个运行一些 C++ (OpenCV) 代码的 Objective-C++ 项目。它运行良好,一切正常。但后来我决定将这些例程作为子项目添加到我的主项目中,每当我尝试使用子项目类时都会遇到错误。
问题是,我的子项目使用 .mm 源文件,而我的主项目仅使用 .m 源文件:
每次我尝试分配 DyOpenCV 类 (
DyOpenCv *opencv = [DyOpenCv alloc]
) 时,都会遇到很多错误:这是将 Obj-C 与 Obj-Cpp 项目合并的技巧吗? 一旦我尝试从 .m 文件运行 .mm 文件,这是一个特殊的界面吗?即使 .mm 文件来自子项目? 是否有必要将我的子项目的所有库添加到我的项目中(我已经这样做了)?
您需要链接 C++ 标准库。如果您的编译源阶段包含任何 c++ 文件,这通常会自动发生,但如果 c++ 全部包含在静态库中,那么您需要明确要求将其链接到最终的可执行文件。
检查子项目的构建设置。查找 C++ 标准库构建选项。如果它设置为 libc++(llvm 标准库),则将
-lc++
添加到应用程序的附加链接器标志中。如果它设置为 libstdc++(gnu 库),则将 -lstdc++
添加到应用程序的附加链接器标志中。