我正在实现一个使用python / C ++ Extensions的C ++程序。截至目前,我明确地将我的程序链接到我编译的python静态库。我想知道有没有办法将我的程序与系统安装的python链接(我的意思是linux附带的默认python安装)
答案 0 :(得分:16)
是。有一个名为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
扩展名的库。但我宁愿坚持所有动态或全静态。
希望它有所帮助。祝你好运!