在objc库中调用包装的静态c ++库会导致链接器错误

Sch*_*ler 2 c++ objective-c linker-errors wrapper xcode4

我有一个cpp静态库,并尝试将其包装在一个静态的obj-c库中,以便它从外部看起来像一个普通的obj-c lib.我的obj-c lib编译得很好,但是当我尝试在App中使用这个lib时,我得到以下链接器错误:

Apple Mach-O Linker (Id) Error
Undefined symbols for architecture i386:
  "operator new(unsigned long)", referenced from:
...
Run Code Online (Sandbox Code Playgroud)

所有libs都可以在每个需要的架构中编译好.

我的包装器lib看起来像这样:

ObjcLib.h

@interface  ObjcLib: NSObject{
}
- (void) doSomething:(NSString*)text;
@end
Run Code Online (Sandbox Code Playgroud)

ObjcLib.mm

#import "ObjcLib.h"
#import "apiFromCppLib.h"
@interface ObjcLib (){
@private
    cppApiNamespace::BaseApi* api;
}
@end

@implementation ObjcLib
- (void) doSomething:(NSString*)text{
    api = new cppApiNamespace::BaseAPI();
}
Run Code Online (Sandbox Code Playgroud)

在我的应用程序中,我在Link Binary With Libraries下添加了ObjcLib.a.库搜索路径也是正确的,但是当我尝试用[ObjcLib alloc]创建一个对象时,我得到了上面提到的链接器错误.我正在使用XCode4和LLVM编译器3.0

希望任何人都可以给我一个提示可能是错误的提示,或者我的包装是否正确.

编辑:在应用程序的构建设置中添加-lstdc ++作为其他链接器标志解决了许多链接器错误,但不是全部.解决的问题是ObjcLib.h和ObjcLib.mm中的cpp命令.保留的是来自BaseAPI的一些方法调用.我们将仔细研究一下这个方法调用与正确链接的其他方法的不同之处.

Stu*_*t H 5

我不熟悉您的编译器或项目,但听起来标准库没有链接.一个-lstdc++选项能解决什么问题吗