Windows10下Go编译c-shared库报could not determine kind of name for C.free如何解决
问题解决方法
1. 修复cgo语法错误
cgo要求导入C包的语句必须紧接在cgo注释之后,两者之间不能存在任何空行,你当前代码中#include <stdlib.h>的注释和import "C"之间的空行会导致cgo无法识别头文件导入声明,等同于未引入stdlib.h,这是报错的核心原因。
修正后的代码示例:
package main import ( "fmt" "unsafe" ) /* #include <stdlib.h> */ import "C" //export FreeMemory func FreeMemory(pointer unsafe.Pointer) { C.free(pointer) }
同时建议将入参直接声明为unsafe.Pointer,避免不必要的类型转换风险。
2. 检查Windows编译环境配置
- 确认已安装与Go版本架构匹配的MinGW-w64环境:64位Go对应64位MinGW-w64,32位Go对应32位MinGW-w64,不要使用TDM-GCC等非官方衍生版本
- 确保MinGW-w64的
bin目录已添加到系统PATH环境变量,执行gcc -v可验证环境是否生效 - 确认编译时已开启CGO:Windows部分Go版本默认
CGO_ENABLED=0,需要手动开启
3. 补充编译命令参数
编译时可显式指定gcc路径避免环境冲突,示例命令:
set CGO_ENABLED=1 set CC=x86_64-w64-mingw32-gcc go build --buildmode=c-shared -o main.dll
内容的提问来源于stack exchange,提问作者Sam
相关产品推荐
相关产品推荐

