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

使用CGO构建Go程序时出现undefined reference错误求助

问题原因及解决方法

错误根源

你的main.go中,cgo的LDFLAGS仅指定了库的搜索路径-L${SRCDIR}/lib,但没有明确指定要链接的目标库,导致链接器找不到execute函数的具体实现。

修复步骤

1. 修正main.go的cgo编译参数

在LDFLAGS后追加-lcalc(因为归档库命名为libcalc.a,链接时遵循-l+库名前缀后部分的规则):

package main

/*
#cgo LDFLAGS: -L${SRCDIR}/lib -lcalc
#cgo CFLAGS: -I${SRCDIR}/include
#include "calc.h"
*/
import "C"

func main() {
    C.execute()
}

注:由于CFLAGS已经指定了include目录,#include直接写calc.h即可,原写法include/calc.h也能生效,但更简洁的方式是直接引用头文件名。

2. 重新构建Go程序

执行构建命令:

go build main.go

此时链接器会在lib目录下找到libcalc.a,并正确链接其中的execute函数实现。

可选验证项

如果问题仍存在,可检查以下两点:

  • 确认execute.c中确实实现了execute()函数,且函数签名与calc.h中的声明完全一致(无拼写错误、参数/返回值匹配)
  • 验证归档库中包含目标符号,执行命令:
nm lib/libcalc.a | grep execute

若输出包含T execute,说明execute函数符号已正确存入归档库。

内容的提问来源于stack exchange,提问作者kelsonic

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.27 02:17:59