使用distutils构建Python扩展模块

Cha*_*l72 4 c++ python gcc distutils

我正在使用distutils来构建一个用C++编写的Python扩展模块.我遇到的问题是,为了编译扩展模块,我需要链接某个共享库.这需要设置额外的编译器标志.所以,我搜索了Python文档,发现了对象的extra_compile_args属性Extension.所以我尝试了以下方法:

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])
Run Code Online (Sandbox Code Playgroud)

这似乎是编译的,除非我在Python中导入我的模块时ImportError由于未定义的符号而引发异常.所以,显然图书馆没有正确链接.所以我尝试编写一个与共享库链接的丢弃C++程序,它运行正常.然后我意识到一些非常奇怪的事情distutils,因为如果我添加一个链接到伪造库名称的编译参数,distutils只会编译所有内容而没有问题:

module.extra_compile_args = ['--std=c++0x', '-l some_fake_library'];
Run Code Online (Sandbox Code Playgroud)

当我运行时setup.py build,构建运行没有错误!

那么,这里发生了什么?如何编译需要链接到共享库的扩展模块?

Kei*_*ith 5

实际上有一个特殊的选择.

例如:

libraries=["rt"]
Run Code Online (Sandbox Code Playgroud)

你不用选项和lib部分.