私はcpp静的ライブラリを持っており、これを静的obj-cライブラリにラップして、通常のobj-c libのように見えます。 マイOBJ-C libにコンパイル罰金が、私は、私は、次のリンカエラーを取得するアプリケーションでは、このLIBを使用しようとすると:objcライブラリ内のラップされた静的C++ライブラリの呼び出しによってリンカエラーが発生する
Apple Mach-O Linker (Id) Error
Undefined symbols for architecture i386:
"operator new(unsigned long)", referenced from:
...
すべてのlibsは、すべての必要なアーキテクチャで罰金コンパイルします。
私のラッパー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]でオブジェクトを作成しようとすると、上記のリンカエラーが発生します。 LLVMコンパイラでXCode4を使用しています
私のラッパーが何か間違っているか、ラッパーが正しいかどうかは誰でも知ることができます。
EDIT: -lstdC++を他のリンカフラグとして追加すると、アプリケーションのビルド設定で多くのリンカエラーが解決されますが、すべてではありません。解決された問題は、ObjcLib.hとObjcLib.mmのcppコマンドでした。残っているのは、BaseAPIからのメソッド呼び出しです。このメソッドは、正しくリンクされているメソッドとは異なるものを呼び出すため、これを詳しく見ていきます。
ありがとう、ほとんどのリンクエラーを解決しましたが、依然として残っています。基本的にはcppのlibからの呼び出しであり、これらがどのように別のものを形成するかをより深く理解するでしょう。 :-) – Schaltfehler
合計は私の問題を解決しました、もう一度ありがとう!残りのエラーは、一部の部品が実際に欠落していたために発生したものです。誰かがlibのビルドからいくつかのファイルをランダムに除外しました.-とにかくうまくいきます^^ – Schaltfehler