2 votes

Utiliser clang avec Cython

J'ai forcé Cython à utiliser clang en spécifiant la variable d'environnement CC :

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

J'ai une construction standard :

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)

Cependant, il semble que Cython utilise en quelque sorte les deux clang et gcc dans différentes parties de l'étape de construction, en particulier il utilise gcc pour construire les bibliothèques partagées :

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

Comment faire pour que Cython utilise clang sur les deux étapes ?

1voto

Katie Points 399

J'ai réalisé que distutils a besoin d'une surcharge de l'éditeur de liens aussi.

os.environ['LDSHARED'] = 'clang -shared'

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X