【问题标题】:Undefined Symbols for custom C++ classes in Xcode 4.6.3. Works in Xcode 4.5.2Xcode 4.6.3 中自定义 C++ 类的未定义符号。适用于 Xcode 4.5.2
【发布时间】:2013-08-18 02:42:44
【问题描述】:

我有一个在 Xcode 4.5.2 中运行良好的 iOS 应用程序,但在 Xcode 4.6.3 中,我的自定义 c++ 类得到了未定义的符号。

SomeClass.hpp

class SomeClass{
public: 
    SomeClass();
    void doStuff();
}  

SomeClass.cpp

#include "SomeClass.hpp"

SomeClass::SomeClass(){ 
    // ra ra ra
}
SomeClass::doStuff() { 
   // ra ra ra
}

CallingClass.mm

#include "SomeClass.hpp"

@implementation CallingClass

-(void) execute{
    SomeClass someObject;
    someObject.doStuff();
}

@end

错误

Undefined Symbols for arm7:
SomeClass::SomeClass() referenced from:
-[CallingClass execute:] in CallingClass.o

.hpp 文件设置为 C++ Headers,.cpp 文件设置为 C++ Source,.mm 文件设置为 Objective-C++ Source。

每个 .cpp 文件都存在于 Build Phases/Compiled Sources 中。

libc++.dylib 包含在我正在使用的库的项目中。

4.6.3 C 语言方言是 c11,而在 4.5.2 中是 C99[-std=c99]。 C++ 语言方言和 C++ 标准库在两个版本的 Xcode 中都设置为编译器默认值。

Xcode 4.6.3 中的编译器是 Apple LLVM 4.2,而 4.5.2 中的编译器是 LLVM 4.1。

我们将不胜感激任何指导。

干杯

【问题讨论】:

  • 您阅读过 4.6.3 的发行说明吗?
  • 深入了解。代码开发人员必须知道他/她正在开发的代码。您必须熟悉您所操作的规则,否则您无法操作。
  • 任何机会你都可以给我一个链接,或者一个简单的答案。
  • 我知道默认编译器现在在 C++11 上当叮当响,但我不明白是什么阻止了我的 c++ 类被链接。

标签: objective-c++ undefined-symbol xcode4.6.3


【解决方案1】:

我遇到过类似的问题,这是我要解决的问题:

1 - 在 Build Phases 部分中针对相应的 mm 文件指定 -fobj-arc 标志(这是可选的,可能并不总是有效)

2 - 确保无论 .mm(或它的 .h 文件)被包含在何处,该源也被标记为 Objective-C++ 源,反之亦然。我知道反复试验有点棘手,但基本原则是为包含的文件树保持相同的编译选项。

【讨论】:

  • 谢谢。您的回答提示我将 .hpp 文件更改为 .h 并将我的 .cpp 更改为 .mm 从而解决了错误。
  • 当然,随时。乐意效劳。如果有帮助,请标记正确。它肯定会帮助您在未来更快地得到答案。
  • 另一方面,如果它给出了建设性的指示,你可以投票(+1)它。这些是在 Stackoverflow 上表达感谢的更直接的方式。
  • 头文件如何标记无关紧要;只有源文件很重要。
【解决方案2】:

已解决

我将 .hpp 文件更改为 .h,将 .cpp 文件更改为 .mm。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-07-03
    • 2021-12-21
    • 2018-03-07
    • 2016-03-25
    • 2022-01-17
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多