当前位置: 首页 > 面试题库 >

如何告诉distutils使用gcc?

张可人
2023-03-14
问题内容

我想用Cython包装一个包含C ++和OpenMP代码的测试项目,并通过setup.py文件与distutils一起构建它。我文件的内容如下所示:

from distutils.core import setup
from distutils.extension import Extension
from Cython.Build import cythonize
from Cython.Distutils import build_ext


modules = [Extension("Interface",
                     ["Interface.pyx", "Parallel.cpp"],
                     language = "c++",
                     extra_compile_args=["-fopenmp"],
                     extra_link_args=["-fopenmp"])]

for e in modules:
    e.cython_directives = {"embedsignature" : True}

setup(name="Interface",
     cmdclass={"build_ext": build_ext},
     ext_modules=modules)

-fopenmp标志与gcc一起用于针对OpenMP进行编译和链接。但是,如果我只是调用

cls ~/workspace/CythonOpenMP/src $ python3 setup.py build

由于编译器是clang,因此无法识别此标志:

running build
running build_ext
skipping 'Interface.cpp' Cython extension (up-to-date)
building 'Interface' extension
cc -Wno-unused-result -fno-common -dynamic -DNDEBUG -g -O3 -Wall -Wstrict-prototypes -I/usr/local/include -I/usr/local/opt/sqlite/include -I/usr/local/Cellar/python3/3.3.0/Frameworks/Python.framework/Versions/3.3/include/python3.3m -c Interface.cpp -o build/temp.macosx-10.8-x86_64-3.3/Interface.o -fopenmp
clang: warning: argument unused during compilation: '-fopenmp'
cc -Wno-unused-result -fno-common -dynamic -DNDEBUG -g -O3 -Wall -Wstrict-prototypes -I/usr/local/include -I/usr/local/opt/sqlite/include -I/usr/local/Cellar/python3/3.3.0/Frameworks/Python.framework/Versions/3.3/include/python3.3m -c Parallel.cpp -o build/temp.macosx-10.8-x86_64-3.3/Parallel.o -fopenmp
clang: warning: argument unused during compilation: '-fopenmp'
Parallel.cpp:24:10: warning: unknown pragma ignored [-Wunknown-pragmas]
        #pragma omp parallel for
                ^
1 warning generated.
c++ -bundle -undefined dynamic_lookup -L/usr/local/lib -L/usr/local/opt/sqlite/lib build/temp.macosx-10.8-x86_64-3.3/Interface.o build/temp.macosx-10.8-x86_64-3.3/Parallel.o -o build/lib.macosx-10.8-x86_64-3.3/Interface.so -fopenmp
ld: library not found for -lgomp
clang: error: linker command failed with exit code 1 (use -v to see invocation)
error: command 'c++' failed with exit status 1

我尝试指定gcc失败:

cls ~/workspace/CythonOpenMP/src $ python3 setup.py build --compiler=g++-4.7
running build
running build_ext
error: don't know how to compile C/C++ code on platform 'posix' with 'g++-4.7' compiler

如何告诉distutils使用gcc?


问题答案:

尝试使用os.environ从setup.py内部设置“ CC”环境变量。



 类似资料:
  • 我想用Cython包装一个包含C和OpenMP代码的测试项目,并通过一个文件用distutils构建它。我的文件内容是这样的: 标志与gcc一起用于编译和链接OpenMP。然而,如果我只是调用 无法识别此标志,因为编译器为clang: 我尝试指定gcc失败: 如何告诉distutils使用gcc?

  • 问题内容: 我有一个click事件发生在我的自定义指令范围之外,因此,我使用jQuery.click()侦听器并在我的范围内调用一个函数,而不是使用“ ng- click”属性,如下所示: close()是一个简单的函数,如下所示: 在我看来,我有一个绑定到isOpen的“ ng-show”元素,如下所示: 调试时,我发现正在调用close(),isOpen被更新为false,但是AngularJ

  • 问题内容: 我想编写一个函数,该函数接收 几种 类型的结构并从JSON解组。为此,我有另一组带有预定义签名的函数,这些函数返回struct实例,但是由于每个函数都返回不同类型的struct,因此函数签名具有的返回类型。 当我发送json.Unmarshal一个具体的结构时,它可以按照我的预期工作,但是当我发送相同的结构时,它将其转换为地图。 这是描述问题的简化示例代码: https://play.

  • 问题内容: pyximport非常方便,但是我不知道如何让它参与Cython的C ++语言选项。从命令行运行。你如何用pyximport达到等效?谢谢! 问题答案: 使Cython创建C ++文件的一种方法是使用pyxbld文件。例如,创建包含以下内容:

  • 一个简单的问题,即使经过几个小时的尝试和搜索,我也无法弄清楚: 我已经安装了Java6和7。 所有项目模块均设置为使用1.6 设置为 设置未执行任何操作 在命令行中将1.6识别为其JDK 重新启动IntelliJ和/或计算机没有更改行为 是否有一个设置来避免Java1.7被调用?

  • 我们的客户正在为内部应用程序使用自己的根CA。证书在Windows密钥库中,但不在Java密钥库中。如何让Java Web Start应用程序使用Windows密钥库搜索valide证书中的SSL连接?将证书导入每个Java密钥库是没有选择的! 编辑:我想使用Windows密钥库的主要原因是验证已签名应用程序的证书