macos — компиляция C ++ с помощью компилятора scons

Я использую Mac OS X 10.8.2 и компилирую код с помощью компилятора scons.
Я использую 32-битную версию базы данных xerces-c 2.8.0.

когда я пытаюсь собрать, я получаю ошибки:

$ SCons

scons: чтение файлов SConscript ...
scons: закончено чтение файлов SConscript.
scons: Построение целей ...

ld: предупреждение: игнорирование файла /usr/xerces-c_2_8_0-x86-macosx-gcc_4_0/lib/libxerces-c.dylib, файл создан для неподдерживаемого формата файла (0xce 0xfa 0xed 0xfe 0x 7 0x 0 0x 0 0x 0 0x 3 0x 0 0x 0 0x 0 0x 6 0x 0 0x 0 0x 0), который не является связываемой архитектурой (x86_64): /usr/xerces-c_2_8_0-x86-macosx-gcc_4_0/lib/libxerces-c.dylib

ld: символы не найдены для архитектуры x86_64
collect2: ld вернул 1 статус выхода
scons: *** [wntevo] Ошибка 1
scons: строительство прекращено из-за ошибок.

Я проверил мой файл libxerces-c.28.0.dylib:

$ file libxerces-c.28.0.dylib
libxerces-c.28.0.dylib: динамически связанная общая библиотека Mach-O i386

Что я должен добавить к своему файлу SConstruct, чтобы он встроился в i386 на компьютере x86_64?

0

Решение

Чтобы уточнить, SCons является не компилятор это инструмент для сборки. Вы используете SCons для вызова компилятора и позволяете SCons позаботиться о деталях того, как создать ваше приложение из источника, который вы редактируете.

Ваша проблема сейчас в том, что SCons не может помочь вам с деталями. Вы должны сказать SCons создать среду, которая позволяет ему компилировать 32-битное приложение. Это делается путем передачи флага компилятору, который инструктирует его для компиляции 32-битного приложения.

Я предполагаю, что ваш компилятор — gcc, и для корректной работы ему нужен флаг -m32. Для этого вы можете сказать SCons сообщить об этом компилятору.

Где-то в файле SConstruct вы найдете вызов, который создает Environment() или что ссылаться на строителя Program() Если вы найдете оба, вы хотели бы изменить среду, которая используется для создания программы. Так что если ваш код говорит env = Environment(...) и позже env.Program(...) Вы хотите изменить строку Environment, чтобы добавить этот аргумент:

env = Environment(...other arguments..., CPPFLAGS=["-m32"])

Вы вызываете сборщик программ следующим образом:

Program(...0 or more arguments...)

вам нужно изменить его на:

Program(...0 or more arguments..., CPPFLAGS=["-m32"])

Это изменение должно быть видно при запуске SCons, так как вы должны увидеть опцию -m32 среди аргументов g ++.

В качестве дополнительного примечания, чтобы избежать путаницы с компиляторами и инструментами сборки, я предлагаю вам прочитать немного о SCons, хорошее начало может быть страницы руководства

1

Другие решения

Это то, что я использую для компиляции на 32-битной арке, когда я хочу в scons

env = Environment(TARGET_ARCH = 'x86')

-1

По вопросам рекламы [email protected]