如何将Python静态库链接到我的C++程序中
我正在写一个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
的库。不过我个人更倾向于全部使用动态库或者全部使用静态库。
希望这对你有帮助。祝好运!