在C ++命令行工具项目中使用Objective-C / C静态库

时间:2015-10-05 01:01:38

标签: c++ objective-c xcode macos

我创建了一个Objective-C / 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];
}

然后我将Info.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添加到项目设置中 - &gt;链接二进制文件与库。还为项目添加了-ObjC标志。 结果我收到链接器错误:

  

架构x86_64的未定义符号:“GetSomeInfo()”,   引自:         _main in main.o ld:找不到架构x86_64 clang的符号:错误:链接器命令失败,退出代码为1(使用-v查看   调用)

如何解决上述问题?

1 个答案:

答案 0 :(得分:0)

在Info.h中,尝试将函数原型GetSomeInfo()包装在extern“C”和#ifdef __cplusplus语句中(以2下划线开头),如下所示:

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