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

Go调用Cython共享库出现未定义引用错误,无法构建程序

解决Go调用Cython生成共享库时的未定义引用问题

问题出在Cython代码的导出方式和编译参数上:直接用--embed生成的C代码中,add函数并没有以标准C函数的形式暴露,而是被Cython封装为Python可调用的内部函数,导致Go链接时找不到add符号。以下是修复步骤:

1. 修改Cython代码,导出标准C函数

更新add.pyx,使用cdef public声明要导出的C函数,确保Cython生成对外可见的符号:

#cython: language_level = 3

cdef public int add(int x, int y):
    return x + y

2. 重新生成C文件

移除--embed参数(该参数用于生成带Python解释器入口的可执行文件代码,不适合共享库场景):

cython -o add.c add.pyx

3. 编译生成共享库

保持原编译命令不变,重新生成libadd.so:

gcc -shared -pthread -fPIC -O2 -Wall -fno-strict-aliasing  -o libadd.so add.c -I/usr/local/include/python3.10 -L/usr/local/lib/ -lpython3.10

4. 构建并运行Go程序

原main.go代码无需修改,构建后需指定共享库路径才能运行:

# 构建Go程序
go build -o main main.go

# 运行(指定当前目录为共享库搜索路径)
LD_LIBRARY_PATH=. ./main

执行后会输出5,符合预期。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.27 19:07:43