我有一個cpp靜態庫,並試圖將其包裝在一個靜態obj-c庫中,以便它從外部看起來就像一個正常的obj-c庫。 我的OBJ-C的lib編譯罰款,但是當我嘗試在一個應用程序我得到下面的連接錯誤使用此lib目錄下:在objc庫中調用包裝的靜態C++庫導致鏈接器錯誤
Apple Mach-O Linker (Id) Error
Undefined symbols for architecture i386:
"operator new(unsigned long)", referenced from:
...
所有庫編譯每一個需要的架構罰款。
我的包裝的lib是這樣的:
ObjcLib.h
@interface ObjcLib: NSObject{
}
- (void) doSomething:(NSString*)text;
@end
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();
}
在我的應用我加入ObjcLib.a下鏈接二進制與圖書館。此外庫搜索路徑是正確的,但是當我嘗試創建一個與[ObjcLib alloc]的對象時,我得到上面提到的鏈接器錯誤。 我使用XCode4與LLVM編譯器3.0
希望任何人都可以給我一個提示什麼可能是錯誤的,或者如果我的包裝甚至是正確的。
編輯: 在應用程序的構建設置中添加-lstdC++作爲其他鏈接器標誌可解決大量鏈接器錯誤,但不是全部。解決的問題是ObjcLib.h和ObjcLib.mm中的cpp命令。剩下的人是來自BaseAPI內部的一些方法調用。仔細看看這個,關於這個方法所調用的不同於那些可以正確鏈接的其他方法。
非常感謝,解決了大部分鏈接錯誤,但仍有一些依然存在。這些基本上是來自cpp lib的調用,將會更深入地瞭解這些將它們分隔開來的方式。 :-) – Schaltfehler
總計解決了我的問題,再次感謝!其餘的錯誤是由於某些部分確實缺失造成的。有人從lib-build中隨機排除一些文件。無論如何,現在工作正常^^ – Schaltfehler