如何在编译C++代码时删除ARCHIGII6标志设置.py?

2024-04-24 12:47:57 发布

您现在位置:Python中文网/ 问答频道 /正文

我想编译一个Python的C++扩展。问题是C++程序只在x8664架构中工作,但是默认编译标志包括-ARCH I38。你知道吗

那个设置.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++

这将失败,因为C++内部的一些静态AsAsDt代码需要x8664。 在删除-arch i386标志后,我可以通过命令行成功地编译它。不过,我正在编写一个库供其他人使用,我想让它变得简单,以便用户可以通过运行python3的标准方式安装它设置.py安装。你知道吗

底线是,我不能改变C++文件,我想在这个里面做点什么。设置.py使其可编译。谢谢!你知道吗


Tags: pymodversion标志setupextensionmincpp
1条回答
网友
1楼 · 发布于 2024-04-24 12:47:57

当我在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的许多警告行看起来仍然很难看。如果有人能建议如何得到的警告,将不胜感激。你知道吗

相关问题 更多 >