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

Using Objective-C/C static library in C++ command line tool project

本文关键字:c++ 命令行 工具 项目 Objective-C 静态 使用      更新时间:2023-10-16

我创建了一个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。在我的主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标志到项目。结果我收到链接器错误:

架构x86_64的未定义符号:"GetSomeInfo()",引用:_main in main。clang: error: linkker命令失败,退出代码为1(使用-v查看调用)

如何解决上述问题?

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

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