macOS下CGO编译报错:未知类型名称'NSString'
问题原因与解决方案
问题出在头文件的包含顺序:你先包含了test.h,但此时NSString的定义还没被引入(#import <Foundation/Foundation.h>在test.h之后),所以编译test.h时编译器不知道NSString是什么类型。
解决步骤
把#import <Foundation/Foundation.h>移到#include "./test.h"之前,确保NSString的定义先被加载,再处理test.h里的结构体。另外Foundation.h已经包含了NSString.h,可以删掉单独的#import <Foundation/NSString.h>简化代码。
修改后的CGO代码:
/* #cgo CFLAGS: -x objective-c #cgo LDFLAGS: -L./ ${SRCDIR}/test.dylib -framework Foundation #import <Foundation/Foundation.h> #include "./test.h" #include <stdlib.h> #include <stdio.h> */ import "C"
补充说明
Objective-C的类型(比如NSString)必须先通过头文件完成声明/定义,才能在其他头文件中被引用,所以头文件的加载顺序直接影响编译是否能识别这些类型。
内容的提问来源于stack exchange,提问作者Baab
相关产品推荐
相关产品推荐

