You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.19 07:50:29