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

Linux Conda环境下编译调用Python的C程序遇链接错误求助

解决C调用Python时Py_Initialize等符号未定义的链接错误

出现这个问题的核心原因是gcc链接器的处理顺序:它会按命令行从左到右的顺序处理输入,如果你把Python的链接参数放在源文件之前,链接器还没读到demo.c里的Py_Initialize等符号引用,就会跳过这些库,导致符号找不到。

直接解决方案:调整编译命令顺序

把源文件demo.c放在最前面,然后依次放头文件包含、编译参数,最后放链接相关的参数(包括Python库和pthread)。修改后的编译命令如下:

gcc demo.c -o demo -I$(python3-config --includes) $(python3-config --cflags) -lpthread $(python3-config --ldflags)

关键是把$(python3-config --ldflags)移到最后,确保链接器在处理完demo.c的符号需求后,能从Python库中匹配到对应的定义。

额外排查点

  • 确认当前终端已经激活你的Anaconda环境,确保python3-config调用的是Anaconda下的版本,而非系统默认Python。可以用which python3-config查看路径,确认是否在Anaconda的环境目录内。
  • 如果调整顺序后仍有问题,手动指定Anaconda的Python库路径:
    找到你Anaconda环境的include和lib目录(比如~/anaconda3/envs/your_env/include/python3.10m和~/anaconda3/envs/your_env/lib),替换成实际路径后执行:
    gcc demo.c -o demo -I/your/anaconda/env/include/python3.xm -L/your/anaconda/env/lib -lpython3.xm -lpthread
    
    注意把python3.xm替换成你环境中实际的Python库文件名(比如python3.9m、python3.11m)。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.13 05:24:52