Проблемы с компиляцией TCC на OS X
Вопрос
Кто -нибудь успешно собрал TCC на OS X?
Из того, что я знаю, это должно быть возможно, но когда я запускаю, сделайте следующую ошибку:
$ make
gcc -o tcc tcc.c -DTCC_TARGET_I386 -O2 -g -Wall -fno-strict-aliasing -mpreferred-stack- boundary=2 -march=i386 -falign-functions=0 -Wno-pointer-sign -Wno-sign-compare -D_FORTIFY_SOURCE=0 -lm -ldl
tcc.c:1: error: CPU you selected does not support x86-64 instruction set
tcc.c:1: error: CPU you selected does not support x86-64 instruction set
tcc.c:1: error: -mpreferred-stack-boundary=2 is not between 4 and 12
make: *** [tcc] Error 1
./configure
работает нормально и дает следующий выход:
$ ./configure
Binary directory /usr/local/bin
TinyCC directory /usr/local/lib/tcc
Library directory /usr/local/lib
Include directory /usr/local/include
Manual directory /usr/local/man
Doc directory /usr/local/share/doc/tcc
Target root prefix
Source path /Users/aaron/Downloads/tcc-0.9.25
C compiler gcc
CPU x86
Big Endian no
gprof enabled no
cross compilers no
use libgcc no
Creating config.mak and config.h
Я почти уверен, что проблема является чем -то простым, но я не собирал достаточно программ на OS X, чтобы знать о Pratfalls ...
Основной целью установки TCC было получить LIBTCC, чтобы я мог начать экспериментировать с динамическим генерацией кода от Ruby (если это имеет значение:-P)
Спасибо!
Решение
Сейчас я консолидирую свои комментарии.
Похоже, есть несколько проблем.
- В схеме именования произошли изменения в схеме именования для доступа к регистре x86 по состоянию на Mac OS 10.5. Видеть Доступ EIP и EBP через UCEXTEXT на OS X. Анкет Это потребует взлома источника до тех пор, пока поддерживающий не может быть убежден поддержать Mac OS X.
- Исполняемые форматы, поддерживаемые
tcc
Не перекрывайте с теми, которые Mac OS X будет работать назначенным. Однако, Xbinary может обратиться к этому. (Я не нашел ни одного фик упаковка или Macports Пакет, однако, и еще не устанавливает его. Не уверен, что я буду-это глубокая магия, и теоретически мог бы сделать очень плохие вещи.) Ах ... это тоже так и было так: Возможность загрузки/выполнения файлов ELF на OSX.
Другие советы
Я только что провел серьезное время, пытаясь заставить TCC работать на OSX. Я включил несколько исправлений, в том числе из ответа выше, и теперь они все в репозитории разработки в http://repo.or.cz/w/tinycc.git. Анкет Строительство, некоторые тесты и все примеры должны работать.
Я не уверен, знаете ли вы, но http://bellard.org/tcc/ Сайт, который принадлежит Фабрису Белларду, который начал этот проект, не обновляется очень регулярно. Главным образом потому, что не так много «официальных» выпусков TCC. TCC - один из тех проектов, которые в основном живы из живых источников и обновлений. Так что, если вы хотите попробовать еще одну попытку, перейдите в http://repo.or.cz/w/tinycc.git и получить филиал «толпа» (не «мастер»). Пожалуйста, посмотри http://repo.or.cz/w/tinycc.git Для получения подробной информации и присоединяйтесь к списку рассылки, чтобы принять участие.
Ошибки могут быть исправлены путем редактирования сценария настройки пакета TCC (версия 0.9.25).
В скрипте настройки строка 36 говорит CPU =uname -m
Если вы запускаете Uname -m в консоли Mac OS X, он печатает «i386», даже если это 64 -битная система.
Решение состоит в том, чтобы прокомментировать эту строку и заменить ее на CPU = x86_64,
Затем некоторые ошибки компиляции будут отображаться из -за соглашений о именованиях в Mac OS X, как упомянуто DMCKEE в этой теме.
Мое исправление состоит в том, чтобы добавить несколько строк в libtcc.c вокруг строки 1512. Наконец, это будет выглядеть как
#ifdef __DARWIN_UNIX03
*paddr = uc->uc_mcontext->__ss.__rip;
#else
*paddr = uc->uc_mcontext.gregs[REG_RIP];
#endif
return 0;
} else {
#ifdef __DARWIN_UNIX03
fp = uc->uc_mcontext->__ss.__rbp;
#else
fp = uc->uc_mcontext.gregs[REG_RBP];
#endif
Тогда это компилирует.