Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/287.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用distutils构建Python扩展模块 我用ditudil构建了一个用C++编写的Python扩展模块。我遇到的问题是,为了编译扩展模块,我需要与某个共享库链接。这需要设置一个额外的编译器标志。因此,我搜索了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])_C++_Python_Gcc_Distutils - Fatal编程技术网

使用distutils构建Python扩展模块 我用ditudil构建了一个用C++编写的Python扩展模块。我遇到的问题是,为了编译扩展模块,我需要与某个共享库链接。这需要设置一个额外的编译器标志。因此,我搜索了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])

使用distutils构建Python扩展模块 我用ditudil构建了一个用C++编写的Python扩展模块。我遇到的问题是,为了编译扩展模块,我需要与某个共享库链接。这需要设置一个额外的编译器标志。因此,我搜索了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]),c++,python,gcc,distutils,C++,Python,Gcc,Distutils,这似乎是在编译,除非我在Python中导入模块时,由于未定义的符号,它会抛出一个ImportError异常。所以,显然图书馆没有正确链接。所以我尝试编写一个与共享库链接的丢弃的C++程序,运行良好。然后我意识到,distutils发生了一些非常奇怪的事情,因为如果我添加一个链接到伪库名的compile参数,distutils就可以毫无问题地编译所有内容: module.extra_compile_args = ['--std=c++0x', '-l some_fake_library']; 当

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

module.extra_compile_args = ['--std=c++0x', '-l some_fake_library'];
当我运行
setup.py build
时,生成运行时没有错误


那么,这是怎么回事?如何编译需要链接到共享库的扩展模块?

实际上有一个特殊的选项

例如:

libraries=["rt"]

您取消了选项和库部分

distutils的目的之一是使代码不依赖于单个编译器。您的“-l somelib”看起来应该与GCC一起使用(即使它应该是“-lsomelib”,没有空间)。这就是为什么要对
扩展
类使用
选项的原因。Distutils然后将适当的link命令传递给它使用的任何编译器

您还可以查看distutils正在使用的实际构建命令,并亲自执行这些命令,以查看出了什么问题