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