我在 Mac 上编写一个 python C 扩展,setup.py 是这样的:
# file: setup.py
from distutils.core import setup, Extension
extra_objects = ["/Users/rrg/Documents/test/aliyun-log-c-sdk/build/Debug/lib/liblog_c_sdk_static.a"]
module1 = Extension('pycproducer',
sources=['pycproducer.c'],
extra_objects=extra_objects)
setup(name='pycproducer',
version='1.0',
description='This is a Math package',
ext_modules=[module1])
其中liblog_c_sdk_static
是我要带上的静态库。但是当我运行python setup.py install
的时候,报了这个错:
第一行估计是编译的命令:
cc -bundle -undefined dynamic_lookup -arch x86_64 -arch i386
-Wl,-F. build/temp.macosx-10.13-intel-2.7/pycproducer.o /Users/rrg/Documents/test/aliyun-log-c-sdk/build/Debug/lib/liblog_c_sdk_static.a -o build/lib.macosx-10.13-intel-2.7/pycproducer.so
后两行是 warning:
ld: warning: The i386 architecture is deprecated for macOS (remove from the Xcode build setting: ARCHS)
ld: warning: ignoring file
/Users/rrg/Documents/test/aliyun-log-c-sdk/build/Debug/lib/liblog_c_sdk_static.a, file was built for archive which is not the architecture being linked (i386): /Users/rrg/Documents/test/aliyun-log-c-sdk/build/Debug/lib/liblog_c_sdk_static.a
我是这么理解的:
distutils
给我生成 gcc 命令,然后生成 gcc 命令里,带了-arch x86_64 -arch i386
两个架构。liblog_c_sdk_static.a
是只支持 x86_64 的,我用了lipo -info
命令看过,显示:
architecture: x86_64-arch x86_64 -arch i386
,但是静态库只有 x86_64,于是给我告警,放弃链接静态库。请问有大佬知道现在怎么办吗?
我理解是应该有个地方,比如在 python 的distutils
里,有个地方指定屏蔽某个 architecture,或者在 gcc 的全局变量里屏蔽也行。