Как убрать флаг -arch i386 при компиляции кода C ++ в setup.py? - PullRequest
0 голосов
/ 23 мая 2019

Я хочу скомпилировать расширение C ++ для Python.Проблема в том, что программа C ++ работает только в архитектуре x86_64, но флаги компиляции по умолчанию включают -arch i386.

setup.py выглядит следующим образом:

from distutils.core import setup, Extension

integral_ext = Extension('mod._mod', 
            sources = ['wrap.cpp'],
            extra_compile_args = ['-mmacosx-version-min=10.7', '-std=c++11', '-stdlib=libc++'])

setup(
    ext_modules = [integral_ext],
)

Во время компиляции терминал показывает, что команда имеет вид:

/usr/bin/clang -fno-strict-aliasing -Wsign-compare -fno-common -dynamic -DNDEBUG -g -fwrapv -O3 -Wall -Wstrict-prototypes -arch i386 -arch x86_64 -g -I/Library/Frameworks/Python.framework/Versions/3.6/include/python3.6m -c wrap.cpp -o build/temp.macosx-10.6-intel-3.6/wrap.o -mmacosx-version-min=10.7 -std=c++11 -stdlib=libc++

Это может произойти из-за некоторого кода static_assertвнутри C ++ требуется x86_64.Я могу успешно скомпилировать его из командной строки после удаления флага -arch i386.Тем не менее, я пишу библиотеку для использования другими, и я хочу упростить ее, чтобы пользователи могли установить ее стандартным способом запуска python3 setup.py install.

Суть в том, что я не могу изменить файл C ++, и я хочу сделать что-то внутри этого setup.py, чтобы он компилировался.Спасибо!

1 Ответ

0 голосов
/ 24 мая 2019

Ошибка исчезла, когда я включил следующие строки в начало setup.py:

import os

os.environ['CFLAGS'] = '-fno-strict-aliasing -dynamic -DNDEBUG -g -fwrapv -O3 -c'
os.environ['LDFLAGS'] = '-arch x86_64 '

И вывод компиляции при запуске python3 setup.py install:

/usr/bin/clang -DNDEBUG -g -fwrapv -O3 -Wall -Wstrict-prototypes -fno-strict-aliasing -dynamic -DNDEBUG -g -fwrapv -O3 -c -I/Library/Frameworks/Python.framework/Versions/3.6/include/python3.6m -c qtwinclient_wrap.cpp -o build/temp.macosx-10.6-intel-3.6/qtwinclient_wrap.o -mmacosx-version-min=10.7 -std=c++11 -stdlib=libc++
/usr/bin/clang++ -bundle -undefined dynamic_lookup -arch i386 -arch x86_64 -g -arch x86_64 -fno-strict-aliasing -dynamic -DNDEBUG -g -fwrapv -O3 -c build/temp.macosx-10.6-intel-3.6/qtwinclient_wrap.o -o build/lib.macosx-10.6-intel-3.6/qtwinclient/_qtwinclient.cpython-36m-darwin.so -lc++ -mmacosx-version-min=10.7 -Lqtwinclient -L/Library/Frameworks/Python.framework/Versions/3.6/lib/ -lqtwinclient_c -lpython3.6
clang: warning: build/temp.macosx-10.6-intel-3.6/qtwinclient_wrap.o: 'linker' input unused [-Wunused-command-line-argument]
clang: warning: -lc++: 'linker' input unused [-Wunused-command-line-argument]
clang: warning: -lqtwinclient_c: 'linker' input unused [-Wunused-command-line-argument]
clang: warning: -lpython3.6: 'linker' input unused [-Wunused-command-line-argument]
clang: warning: argument unused during compilation: '-bundle' [-Wunused-command-line-argument]
clang: warning: argument unused during compilation: '-undefined dynamic_lookup' [-Wunused-command-line-argument]
clang: warning: argument unused during compilation: '-g' [-Wunused-command-line-argument]
clang: warning: argument unused during compilation: '-fno-strict-aliasing' [-Wunused-command-line-argument]
clang: warning: argument unused during compilation: '-D NDEBUG' [-Wunused-command-line-argument]
clang: warning: argument unused during compilation: '-g' [-Wunused-command-line-argument]
clang: warning: argument unused during compilation: '-fwrapv' [-Wunused-command-line-argument]
clang: warning: argument unused during compilation: '-O3' [-Wunused-command-line-argument]
clang: warning: argument unused during compilation: '-mmacosx-version-min=10.7' [-Wunused-command-line-argument]
clang: warning: argument unused during compilation: '-Lqtwinclient' [-Wunused-command-line-argument]
clang: warning: argument unused during compilation: '-L/Library/Frameworks/Python.framework/Versions/3.6/lib/' [-Wunused-command-line-argument]

Компиляция прошла успешно, но множество строк предупреждений clang: warning: argument unused during compilation все еще выглядят безобразно.Если кто-нибудь может подсказать, как получить предупреждения, которые будут очень благодарны.

...