2011-07-19 17 views
2

私は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からのメソッド呼び出しです。このメソッドは、正しくリンクされているメソッドとは異なるものを呼び出すため、これを詳しく見ていきます。

答えて

5

私はあなたのコンパイラやプロジェクトに精通していませんが、標準ライブラリがリンクされていないように聞こえます。 -lstdc++オプションは何かを修正しますか?

+0

ありがとう、ほとんどのリンクエラーを解決しましたが、依然として残っています。基本的にはcppのlibからの呼び出しであり、これらがどのように別のものを形成するかをより深く理解するでしょう。 :-) – Schaltfehler

+0

合計は私の問題を解決しました、もう一度ありがとう!残りのエラーは、一部の部品が実際に欠落していたために発生したものです。誰かがlibのビルドからいくつかのファイルをランダムに除外しました.-とにかくうまくいきます^^ – Schaltfehler

関連する問題