2

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

一些类.hpp

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

SomeClass.cpp

#include "SomeClass.hpp"

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

调用类.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,而其 LLVM 4.1 是 4.5.2。

任何指导将不胜感激。

干杯

4

2 回答 2

2

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

-fobj-arc1 -在构建阶段部分中针对相应的 mm 文件指定标志(这是可选的,可能并不总是有效)

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

于 2013-08-18T05:57:20.943 回答
0

解决了

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

于 2013-08-18T06:28:05.803 回答