我使用distutils构建用C++编写的Python扩展模块。我遇到的问题是,为了编译扩展模块,我需要链接一个特定的共享库。这需要设置一个额外的编译器标志。因此,我通过Python文档搜索并找出Extension
对象的extra_compile_args
属性。所以,我试过如下:使用distutils构建Python扩展模块
from distutils.core import setup, Extension
module = Extension('test', sources = ['test.cpp'])
module.extra_compile_args = ['--std=c++0x', '-l mylib'];
setup(name = 'test', version = '1.0', ext_modules = [module])
这似乎编译,除非导入我的模块在Python它抛出一个异常ImportError
由于未定义的符号。所以,显然图书馆没有正确链接。所以我试着写了一个与共享库链接的C++程序,它运行良好。然后我意识到事情非常奇怪的是怎么回事distutils
,因为如果我添加一个链接到一个假的库名编译参数,distutils的只是编译一切都没有问题:
module.extra_compile_args = ['--std=c++0x', '-l some_fake_library'];
当我运行setup.py build
,构建运行没有错误!
那么,这是怎么回事?我如何编译需要链接到共享库的扩展模块?