使用cgo链接C静态库到Go代码报错:跳过不兼容的addLogic.lib
cgo调用C静态库时出现"skipping incompatible"和"cannot find -laddLogic"错误
问题详情
尝试在Go中通过cgo调用C静态库,测试项目中复现了实际问题:执行go build test.go时链接器报错,提示静态库不兼容且无法找到指定库。
代码与文件结构
所有文件(test.go、add.h、addLogic.lib)位于同一目录:
- Go代码(test.go)
package main import "fmt" /* #include<stdio.h> #include "add.h" #cgo CFLAGS: -I . #cgo LDFLAGS: -fPIC -L. -laddLogic void addT() { int a = 1; int b = 2; int c; c = add(a,b); printf("%d", c); } */ import "C" func main() { fmt.Println("hello world") C.addT() }
- 头文件(add.h)
int add(int a, int b);
- C实现代码(add.c)
#include "add.h" int add(int a, int b) { return a+b; }
错误输出
# _/C_/static_lib/test C:/TDM-GCC-64/bin/../lib/gcc/x86_64-w64-mingw32/10.3.0/../../../../x86_64-w64-mingw32/bin/ld.exe: skipping incompatible ./addLogic.lib when searching for -laddLogic C:/TDM-GCC-64/bin/../lib/gcc/x86_64-w64-mingw32/10.3.0/../../../../x86_64-w64-mingw32/bin/ld.exe: skipping incompatible ./addLogic.lib when searching for -laddLogic C:/TDM-GCC-64/bin/../lib/gcc/x86_64-w64-mingw32/10.3.0/../../../../x86_64-w64-mingw32/bin/ld.exe: skipping incompatible .\addLogic.lib when searching for -laddLogic C:/TDM-GCC-64/bin/../lib/gcc/x86_64-w64-mingw32/10.3.0/../../../../x86_64-w64-mingw32/bin/ld.exe: cannot find -laddLogic C:/TDM-GCC-64/bin/../lib/gcc/x86_64-w64-mingw32/10.3.0/../../../../x86_64-w64-mingw32/bin/ld.exe: skipping incompatible ./addLogic.lib when searching for -laddLogic collect2.exe: error: ld returned 1 exit status
环境信息
- Go版本:go1.11.1 windows/amd64
- GCC版本:tdm64-1 10.3.0
- 操作系统:Windows 10
- Go环境变量配置为amd64架构
- 静态库通过VS开发者控制台生成
解决方案
1. 重新生成GNU格式的静态库
VS生成的.lib是MSVC格式,和TDM-GCC的链接器不兼容,必须用GCC重新编译生成GNU格式的静态库(.a文件):
在TDM-GCC的终端中执行以下命令:
# 编译C代码为目标文件 gcc -c -fPIC add.c -o add.o # 打包为静态库 ar rcs libaddLogic.a add.o
2. 修改cgo的链接参数
将test.go中的LDFLAGS改为指向新生成的.a库(GCC会自动识别libxxx.a对应-lxxx参数):
#cgo LDFLAGS: -L. -laddLogic
3. 确认架构一致性
确保使用的TDM-GCC是64位版本(你的tdm64-1符合要求),和Go的amd64架构完全匹配,避免32/64位不兼容问题。
4. 重新编译Go代码
执行go build test.go,此时链接器会正常加载libaddLogic.a,生成可执行文件。
内容的提问来源于stack exchange,提问作者Divyansh786
相关产品推荐
相关产品推荐

