Проблемы компиляции TCC на OS X - PullRequest
7 голосов
/ 15 сентября 2010

Кто-нибудь успешно скомпилировал 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)

Спасибо!

Ответы [ 3 ]

27 голосов
/ 06 марта 2012

Я только что провел серьезное время, пытаясь заставить tcc работать на OSX. Я включил несколько исправлений, в том числе одно из ответа выше, и теперь все они находятся в репозитории разработки на http://repo.or.cz/w/tinycc.git. Сборка, некоторые тесты и все примеры должны работать.

Я не уверен, что вам известно, но сайт http://bellard.org/tcc/, принадлежащий Фабрису Белларду, который начал этот проект, обновляется не очень регулярно. Главным образом потому, что существует не так много «официальных» релизов tcc. tcc - один из тех проектов, который в основном основан на живых источниках и обновлениях. Поэтому, если вы хотите попробовать еще раз, перейдите на http://repo.or.cz/w/tinycc.git и получите ветку 'mob' (не 'master'). Пожалуйста, смотрите http://repo.or.cz/w/tinycc.git для получения подробной информации и присоединяйтесь к списку рассылки, чтобы принять участие.

3 голосов
/ 17 августа 2011

Ошибки могут быть исправлены путем редактирования скрипта configure пакета 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

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

3 голосов
/ 15 сентября 2010

Я сейчас объединю свои комментарии.

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

  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 .
...