В моем случае я обнаружил, что флаги с двойной аркой начинаются здесь , в частности, с distutils.sysconfig.get_config_var('LDFLAGS')
. Это возвращает LDFLAGS
, с которым Python считает, что вы должны связать модули Python. В моем случае file $(which python)
- это «универсальный двоичный файл Mach-O с 2 архитектурами», поэтому Python считает, что вам следует связать с -arch x86_64 -arch i386 -Wl,F.
Моя проблема заключалась в том, что я создавал собственный модуль Python, который должен был связываться с Python, и другую библиотеку, которая не была построена с обеими арками. При сборке моего модуля с обеими дугами связывание не удавалось с «символами не найдены», поскольку обе дуги не были доступны в сторонней библиотеке.
Поскольку waf , к сожалению, не позволяет вам переопределить его вычисленные флаги с вашими собственными флагами, как Automake делает , я мог бы это исправить, только связавшись напрямую с моим объектом ctx()
в моем wscript
:
for var in ['CFLAGS_PYEMBED', 'CFLAGS_PYEXT', 'CXXFLAGS_PYEMBED',
'CXXFLAGS_PYEXT', 'LINKFLAGS_PYEMBED', 'LINKFLAGS_PYEXT']:
newvar = []
for ix, arg in enumerate(ctx.env[var]):
if '-arch' not in (arg, ctx.env[var][ix - 1]):
newvar.append(arg)
ctx.env[var] = newvar
(Это удаляет все -arch
флаги и их аргументы из соответствующих переменных. Так как я также передавал свой собственный -arch
флаг в моем CFLAGS
, теперь он не переопределяется.)