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

nginx unit配置时Python3.10环境编译C代码报OPENSSL_sk_num未定义

问题原因与解决方案

优先排查链接顺序问题(无需重新编译Python)

GCC 链接器遵循从左到右的符号解析规则,被依赖的库必须放在依赖它的库的后方。你当前的编译命令中,-lcrypto、-lssl 放在了-lpython3.10的前面,而你的Python 3.10是依赖OpenSSL符号的,链接器扫描到前面的libcrypto、libssl时,还不知道后续的libpython需要用到这些符号,会直接丢弃未被引用的符号,最终导致OPENSSL_sk_num等符号未找到错误。
你可以先把编译命令调整为如下顺序再尝试编译:

cc -pipe -fPIC -fvisibility=hidden -O -W -Wall -Wextra -Wno-unused-parameter -Wwrite-strings -fstrict-aliasing -Wstrict-overflow=5 -Wmissing-prototypes -Werror -g -I/home/shared/Builds/Python-3.10.0/include/python3.10 -I/home/shared/Builds/Python-3.10.0/include/python3.10 -o build/autotest build/autotest.c -L/home/shared/Builds/Python-3.10.0/lib/python3.10/config-3.10 -L/home/shared/Builds/Python-3.10.0/lib -lpython3.10 -lcrypto -lssl -lpthread -lutil -lm -lm

调整顺序后仍报错的排查方案

如果修改顺序后问题仍然存在,再依次排查以下问题:

  • 确认链接器调用的libcrypto、libssl版本和你编译Python 3.10时使用的OpenSSL 1.1.1版本完全一致,避免调用到系统默认安装的其他版本OpenSSL库(OPENSSL_sk_num是OpenSSL 1.1.x系列专属符号,1.0.x版本对应符号为sk_num,版本不匹配就会报未定义)。你可以在编译命令中加入-Wl,-t参数,查看链接器实际加载的libcrypto、libssl路径是否符合预期。
  • 如果你使用的是静态编译的libpython.a,且不想在后续链接应用时额外指定openssl依赖,再考虑重新编译Python,将libcrypto、libssl静态链接到libpython.a中。编译Python时指定--with-openssl=你的OpenSSL1.1.1安装路径,同时在LDFLAGS中加入-Wl,-Bstatic -lssl -lcrypto -Wl,-Bdynamic参数即可实现,没有特殊分发需求的话不需要做这一步。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.25 04:54:03