gpt4 book ai didi

c++ - 使用 distutils 构建 Python 扩展模块

转载 作者:塔克拉玛干 更新时间:2023-11-03 01:25:22 26 4
gpt4 key购买 nike

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

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 中导入我的模块时,它会由于 undefined symbol 而抛出 ImportError 异常。所以,显然图书馆没有正确链接。所以我尝试编写一个与共享库链接的一次性 C++ 程序,它运行良好。然后我意识到 distutils 发生了一些非常奇怪的事情,因为如果我添加一个链接到虚假库名称的编译参数,distutils 会毫无问题地编译所有内容:

module.extra_compile_args = ['--std=c++0x', '-l some_fake_library'];

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

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

最佳答案

实际上有一个特殊的选项。

例如:

libraries=["rt"]

您省略了选项和库部分。

关于c++ - 使用 distutils 构建 Python 扩展模块,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5760356/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com