如何将python静态库与我的c ++程序链接起来

时间:2010-10-08 13:50:14

标签: python

我正在实现一个使用python / C ++ Extensions的C ++程序。截至目前,我明确地将我的程序链接到我编译的python静态库。我想知道有没有办法将我的程序与系统安装的python链接(我的意思是linux附带的默认python安装)

1 个答案:

答案 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扩展名的库。但我宁愿坚持所有动态或全静态。

希望它有所帮助。祝你好运!