【问题标题】:Using Objective-C/C static library in C++ command line tool project在 C++ 命令行工具项目中使用 Objective-C/C 静态库
【发布时间】:2015-10-05 01:01:38
【问题描述】:

我创建了一个 Objective-C/C 静态库,我想在 C++ 下开发的独立项目中使用它

这是静态库的代码:

信息.h

const char * GetSomeInfo();

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

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

如何解决上述问题?

【问题讨论】:

    标签: c++ objective-c xcode macos


    【解决方案1】:

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-09-30
      • 1970-01-01
      • 2013-11-27
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多