使用clang与Cython

5

我通过指定CC环境变量,强制Cython使用clang编译器:

import os
os.environ['CC'] = 'clang'

我有一个标准构建:

EXT_MODULES = [Extension('example.src.ex',
                         sources=['example/src/ex.pyx'])]

setup_info = dist(
    ...
    ext_modules=cythonize(EXT_MODULES,
                          compiler_directives={'language_level': '3'}),
    ...
)
setup(**setup_info)

然而,似乎Cython在构建步骤的不同部分中使用了两者clang和gcc,特别是它使用gcc来构建共享库:

running build_ext
building 'example.src.ex' extension
creating build/temp.linux-x86_64-3.8
creating build/temp.linux-x86_64-3.8/example
creating build/temp.linux-x86_64-3.8/example/src
clang -Wno-unused-result -Wsign-compare -DNDEBUG -g -fwrapv -O3 -Wall -DTHREAD_STACK_SIZE=0x100000 -fPIC -I/usr/local/include/python3.8 -c example/src/ex.c -o build/temp.linux-x86_64-3.8/example/src/ex.o
creating build/lib.linux-x86_64-3.8
creating build/lib.linux-x86_64-3.8/example
creating build/lib.linux-x86_64-3.8/example/src
gcc -shared -Wl,--strip-all build/temp.linux-x86_64-3.8/example/src/ex.o -L/usr/local/lib -o build/lib.linux-x86_64-3.8/example/src/ex.cpython-38-x86_64-linux-gnu.so

如何让Cython在两个步骤中都使用clang编译器?


你把这个放哪?在你的setup.py文件里面吗? - Thomas Ahle
1个回答

5
我意识到distutils也需要重写链接器。
os.environ['LDSHARED'] = 'clang -shared'

在我的情况下,我还需要 os.environ['CXX'] = 'clang++' - Thomas Ahle

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接