Проблемы с компиляцией TCC на OS X

Кто-нибудь успешно скомпилировал TCC на OS X?

Насколько я знаю, это должно быть возможно, но когда я запускаю make, я получаю следующую ошибку:

$ 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, чтобы знать о ловушках...

Основная цель установки TCC состояла в том, чтобы получить libtcc, чтобы я мог начать экспериментировать с динамической генерацией кода из Ruby (в случае, если это имеет значение :-p)

Спасибо!


person Aaron Gough    schedule 14.09.2010    source источник
comment
Мой MacBook под управлением 10.5 получает другую ошибку, чем вы сообщаете. Какая у вас версия ОС и на каком железе?   -  person dmckee --- ex-moderator kitten    schedule 15.09.2010
comment
Вышеупомянутая ошибка возникла в 10.6. В сборке 10.5 обнаруживаются фактические ошибки в программе, связанные с регистрационным кодом доступа...   -  person Aaron Gough    schedule 16.09.2010


Ответы (3)


Сейчас я подытожу свои комментарии.

Кажется, есть несколько проблем.

  1. В Mac OS 10.5 произошли изменения в схеме именования для доступа к регистрам x86. См. Доступ к EIP и EBP через ucontext в OS X. Это потребует взлома исходного кода до тех пор, пока сопровождающий не сможет убедить поддерживать Mac OS X.
  2. Форматы исполняемых файлов, поддерживаемые tcc, не пересекаются с форматами, которые Mac OS X будет запускать изначально. Однако XBinary может решить эту проблему. (Я не нашел ни пакета fink, ни пакета MacPorts, однако я еще не установил его. Не уверен, что буду - это глубокая магия, и теоретически он действительно может сделать очень плохие вещи. .) Ах... это уже было и на SO: Возможность загрузки/выполнения файлов ELF в OSX.
person dmckee --- ex-moderator kitten    schedule 14.09.2010
comment
Спасибо за Ваш ответ! Мне удалось добавить альтернативный код для доступа к регистру под OS X и заставить TCC компилироваться. Однако вторая проблема, на которую вы указали, является остановкой шоу ... Я собираюсь оставить ее в покое, так как потребуется много работы, чтобы расширить TCC для двоичных файлов MACH-0. Спасибо за вашу помощь! - person Aaron Gough; 16.09.2010

Я только что потратил серьезное время, пытаясь заставить 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. и присоединяйтесь к списку рассылки, чтобы принять участие.

person mikijov    schedule 06.03.2012
comment
Я забыл упомянуть, что в настоящее время tcc на osx может использоваться как язык сценариев как в оболочке, так и в приложении. Он не может создавать двоичные файлы, которые могут выполняться как автономные процессы. - person mikijov; 06.03.2012
comment
Это очень круто, спасибо, что сделали это доступным. Если вы хотите, чтобы больше людей использовали его, вы можете дать конкретные инструкции о том, как его получить и создать. Не все знают git, и необходимость получить ветку mob создает дополнительную проблему для непосвященных. - person Charphacy; 03.04.2012

Ошибки можно исправить, отредактировав скрипт конфигурации пакета TCC (версия 0.9.25).

В скрипте configure строка 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

Затем он компилируется.

person xiaochuanQ    schedule 17.08.2011