簡體   English   中英

在C ++命令行工具項目中使用Objective-C / C靜態庫

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

我已經創建了一個Objective-C / C靜態庫,我想在C ++下開發的單獨項目中使用

這是靜態庫的代碼:

信息h

const char * GetSomeInfo();

信息量

#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中的_main ld:架構x86_64的符號未找到clang:錯誤:鏈接器命令失敗,退出代碼為1(使用-v查看調用)

如何解決以上問題?

在Info.h中,嘗試將函數原型GetSomeInfo()包裹在外部的“ C”和#ifdef __cplusplus語句(以2個下划線開頭)中,如下所示:

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM