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

neu*_*ron 10 python

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

小智 17

是.有一个名为的命令行实用程序python-config:

Usage: /usr/bin/python-config [--prefix|--exec-prefix|--includes|--libs|--cflags|--ldflags|--help]
Run Code Online (Sandbox Code Playgroud)

出于链接目的,您必须使用--ldflags参数调用它.它将打印您必须传递给链接器(或g++)的标志列表,以便与系统安装的python库链接:

$ python-config --ldflags
-L/usr/lib/python2.6/config -lpthread -ldl -lutil -lm -lpython2.6
Run Code Online (Sandbox Code Playgroud)

它还可以为您提供使用--cflags参数进行编译的标志:

$ python-config --cflags
-I/usr/include/python2.6 -I/usr/include/python2.6 -fno-strict-aliasing -DNDEBUG -g -fwrapv -O2 -Wall -Wstrict-prototypes
Run Code Online (Sandbox Code Playgroud)

假设你有一个test.cpp文件中的测试程序,那么你可以做这样的事情来编译和链接:

g++ $(python-config --cflags) -o test $(python-config --ldflags) ./test.cpp
Run Code Online (Sandbox Code Playgroud)

这会将您的程序与共享库链接起来.如果要转为静态,可以将-static选项传递给链接器.但这将与所有静态内容相关联,包括运行时.如果你想只使用静态python,你必须自己找到这些库.其中一个选项是解析python-config --ldflags输出并查找带.a扩展名的库.但我宁愿坚持所有动态或全静态.

希望能帮助到你.祝好运!