如何将Python静态库链接到我的C++程序中

12 投票
1 回答
14198 浏览
提问于 2025-04-16 05:12

我正在写一个C++程序,这个程序需要用到Python和C++的扩展。目前,我是把我的程序直接链接到我自己编译的Python静态库上。我想知道有没有办法让我的程序链接到系统自带的Python,也就是Linux默认安装的Python。

1 个回答

20

是的,有一个命令行工具叫做 python-config

Usage: /usr/bin/python-config [--prefix|--exec-prefix|--includes|--libs|--cflags|--ldflags|--help]

如果你想要链接库的话,需要加上 --ldflags 参数来调用它。它会打印出一系列你需要传给链接器(或者 g++)的标志,这样才能和系统中安装的 Python 库链接:

$ python-config --ldflags
-L/usr/lib/python2.6/config -lpthread -ldl -lutil -lm -lpython2.6

它还可以通过 --cflags 参数给你编译时需要的标志:

$ python-config --cflags
-I/usr/include/python2.6 -I/usr/include/python2.6 -fno-strict-aliasing -DNDEBUG -g -fwrapv -O2 -Wall -Wstrict-prototypes

比如说你有一个测试程序在 test.cpp 文件里,那么你可以这样做来编译和链接:

g++ $(python-config --cflags) -o test $(python-config --ldflags) ./test.cpp

这样会把你的程序和共享库链接在一起。如果你想使用静态链接,可以给链接器加上 -static 选项。但这样会链接所有的静态库,包括运行时库。如果你只想用静态的 Python 库,你需要自己找这些库。一个方法是解析 python-config --ldflags 的输出,寻找后缀为 .a 的库。不过我个人更倾向于全部使用动态库或者全部使用静态库。

希望这对你有帮助。祝好运!

撰写回答