LinuxSir.cn,穿越时空的Linuxsir!

 找回密码
 注册
搜索
热搜: shell linux mysql
查看: 238|回复: 0

在类 Unix 系统中编译和链接

[复制链接]
发表于 2024-1-21 00:09:58 | 显示全部楼层 |阅读模式


为了将 Python 解释器嵌入应用程序,找到正确的编译参数传给编译器 (和链接器) 并非易事,特别是因为 Python 加载的库模块是以 C 动态扩展(.so 文件)的形式实现的。

为了得到所需的编译器和链接器参数,可执行 pythonX.Y-config 脚本,它是在安装 Python 时生成的(也可能存在 python3-config 脚本)。该脚本有几个参数,其中以下几个参数会直接有用:

pythonX.Y-config --cflags 将给出建议的编译参数。

/opt/bin/python3.11-config --cflags
-I/opt/include/python3.11 -I/opt/include/python3.11 -Wsign-compare  -DNDEBUG -g -fwrapv -O3 -Wall
pythonX.Y-config --ldflags --embed 将给出在链接时建议的旗标:

/opt/bin/python3.11-config --ldflags --embed
-L/opt/lib/python3.11/config-3.11-x86_64-linux-gnu -L/opt/lib -lpython3.11 -lpthread -ldl  -lutil -lm
备注 为了避免多个 Python 安装版本引发混乱(特别是在系统安装版本和自己编译版本之间),建议用 pythonX.Y-config 指定绝对路径,如上例所述。
如果上述方案不起作用(不能保证对所有 Unix 类平台都生效;欢迎提出 bug 报告),就得阅读系统关于动态链接的文档,并检查 Python 的 Makefile (用 sysconfig.get_makefile_filename() 找到所在位置)和编译参数。这时 sysconfig 模块会是个有用的工具,可用编程方式提取需组合在一起的配置值。比如:

>>>
import sysconfig
sysconfig.get_config_var('LIBS')
'-lpthread -ldl  -lutil'
sysconfig.get_config_var('LINKFORSHARED')
'-Xlinker -export-dynamic'
您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部 返回列表