2015-10-05 38 views
0

我已經創建了我想這是在C++使用Objective-C/C的C++命令行工具,項目靜態庫

這裏開發分離的項目中使用一個Objective-C/C靜態庫是一個代碼靜態庫:

Info.h

const char * GetSomeInfo(); 

Info.m

#import "Info.h" 
#import <Foundation/Foundation.h> 

@interface Info : NSObject 

- (NSString *)someInfo; 

@end 

@implementation Info 

- (NSString *)someInfo 
{ 
    return @"getting some info"; 
} 

@end 

const char * GetSomeInfo() 
{ 
    Info *info = [[Info alloc] init]; 
    return [[info someInfo] UTF8String]; 
} 

然後我說我nfo.h和Info.a到我的主C++的Xcode項目,它看起來像在Xcode創建命令行工具:

#include <iostream> 
#include "Info.h" 

int main(int argc, const char * argv[]) 
{ 
    const char *someInfo = GetSomeInfo(); 
    printf("some info: %s", someinfo); 
    return 0; 
} 

我加Info.a到項目設置 - >鏈接二進制與圖書館。還向項目添加了-ObjC標誌。 因爲我收到鏈接器錯誤:

Undefined symbols for architecture x86_64: "GetSomeInfo()", referenced from: _main in main.o ld: symbol(s) not found for architecture x86_64 clang: error: linker command failed with exit code 1 (use -v to see invocation)

如何解決上述問題?

回答

0

在Info.h,嘗試在extern 「C」 包裝函數原型GetSomeInfo()則#ifdef __cplusplus聲明(2個下劃線開始),像這樣:

#ifdef __cplusplus 
extern "C" { 
#endif 
    const char * GetSomeInfo(); 
#ifdef __cplusplus 
} 
#endif 
相關問題