4

我创建了一个运行一些C++(OpenCV)代码的Objective-C++项目。它运行良好,一切正常。但后来我决定将这些例程作为子项目添加到我的MAIN PROJECT中,每当我尝试使用子项目类时都会出错。将Obj-C++子项目添加到Xcode Obj-C项目时遇到问题

的事情是,我的子项目使用.mm源文件,而我的主要项目只使用.M源文件:enter image description here

每次我尝试分配一个类DyOpenCV(DyOpenCv *opencv = [DyOpenCv alloc]),我得到了很多错误:Compilation errors

这是一个合并Obj-C与Obj-Cpp项目的提示吗? 是一个特殊的界面使用,一旦我试图运行.mm文件从.m的?即使.mm文件来自子项目? 是否有必要将我的子项目的所有库添加到我的项目中(我已经这样做了)?

欢呼声,

+0

看看那些缺少的符号。您必须链接到C++标准库。将连接器从'clang'改为'clang ++',它会正常工作。 – 2013-04-27 17:49:57

+0

它没有工作,H2CO3。我实际上是在这个教程的方式:http://philjordan.eu/article/strategies-for-using-c++-in-objective-c-项目似乎教在这些情况下做什么。如果它适用于我,我会在这里回复=) – marcelosalloum 2013-04-27 18:53:39

回答

7

您需要链接到C++标准库。如果您的编译源代码阶段包含任何C++文件,这通常会自动发生,但如果C++全部包含在静态库中,那么您需要明确要求将其链接到最终的可执行文件。

检查子项目的构建设置。寻找C++标准库构建选项。如果它设置为libC++(llvm标准库),则将-lc++添加到应用程序的附加链接器标志。如果它设置为libstdC++(gnu库),那么将-lstdc++添加到您的应用程序的附加链接器标志。

+0

我做到了,出现了一系列其他错误。在我的Obj-C项目中,到处都有'@property(nonatomic strong)...'行,因为这个强大的东西出现了一个错误。我对这个解决方案更感兴趣:http://philjordan.eu/article/strategies-for-using-c++-in-objective-c-projects,但是不能保证它能起作用。 – marcelosalloum 2013-04-28 21:38:02

+0

您确定只更改了链接器标志吗?你所描述的听起来像是编译问题,而不是链接(这是你的原始错误)。 – 2013-04-28 21:49:27

+0

你说得对。正如你所建议的那样,我只是将'-lC++'添加到我的**其他链接器标记**并将我的**标准库**更改为'libC++'。 – marcelosalloum 2013-04-29 01:00:38