使用Objective-C/C静态库进行c++命令行工具项目
Using Objective-C/C static library in C++ command line tool project
我创建了一个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
相关文章:
- 从命令行c++发送文本文件名
- 为cl.exe(Visual Studio代码)指定命令行C++版本
- 如何在OMNET++中指定与命令行参数组合的输出文件名
- 数组长度,为什么从命令行获取时不能使用它?
- 如何处理linux终端中带有负号(-)的C++中的命令行参数
- VS Code "command":"make"与终端窗口中的命令行"make"不同
- 未定义的引用 .. 使用 OpenCV 编译 C++ 代码时,从命令行
- 通过 Openssl 命令行加密,通过 c++ 解密
- CMake "--target install"无需"--build"命令行
- 更改命令行 qt5 源代码构建配置的正确/快速方法
- 使用 C++ 将命令行参数拆分为参数/向量
- 用于解析 win64 堆栈跟踪的命令行客户端(可以访问符号服务器)
- LLVM | codegen 用于带有命令行选项的程序输入功能
- 如何在OMNET++中添加专门的命令行参数?
- Makefile g++ 使用命令行中的 -D 变量进行编译,默认值
- 在命令行中创建快捷命令
- 在命令行上将输入显示到数组中时如何删除 ./a.out?
- C++命令行提示符不应重复
- 如何在不传递命令行参数的情况下在 c++ 中设置环境变量
- 通过命令行在Visual Studio中编译单个独立文件