GCC 4.2.1 Компиляция на Cygwin (Win7 64bit) для iPhone - PullRequest
0 голосов
/ 07 марта 2011

Это займет много времени, чтобы объяснить, но короткая версия заключается в том, что в настоящее время я пытаюсь скомпилировать внешний интерфейс GL LLVM для ARMv7, чтобы скомпилировать приложения для Cortex-A8 (iPhone 3GS).Я сталкиваюсь с ошибкой из LD при компиляции libgcc (часть процесса компиляции gcc), которая сводит меня с ума!

Команда выглядит так:

/usr/llvm-gcc-4.2-2.8.source/build/./gcc/xgcc \
-B/usr/llvm-gcc-4.2_2.8.source/build/./gcc \
-B/usr/local/arm-apple-darwin/bin \
-B/usr/local/arm-apple-darwin/lib \
-isystem /usr/local/arm-apple-darwin/include \
-isystem /usr/local/arm-apple-darwin/sys-include \
-O2 -g -W -Wall -Wwrite-strings -wstrict-prototypes -Wmissing-prototypes -Wold-style-definition -fno-inline -dynamiclib -nodefaultlibs -W1,-dead_strip \
-marm \
-install_name /usr/local/arm-apple-darwin/lib/libgcc_s.1.dylib \
-single_module -o ./libgcc_s.1.dylib.tmp \
-W1,-exported_symbols_list,libgcc/./libgcc.map
-compatibility_version 1 -current_version 1.0
-DIN_GCC -DCROSS_DIRECTORY_STRUCTURE -DHAVE_GTHR_DEFAULT -DIN_LIBGCC2 -D__GCC_FLOAT_NOT_NEEDED -Dinhibit_libc \
... long list of .o files ... \
-lc

И результатобычно это множество неопределенных ссылок на malloc, free, exit и т. д., которые обычно указывают на то, что libc не компилируется. После просмотра списка ошибок, которые выдает ld, в верхней части я вижу, что он пытается вытянутьв /usr/lib/libc.a и жалуется, что это не правильная платформа.Хорошо, это имеет смысл, поэтому я потратил 5 минут на Google и нашел ответ.Оказывается, что если я скопирую libSystem.dylib и переименую его в libc.dylib, это должно решить проблему, но это не так.Я не смог найти копию этого файла на своем телефоне, поэтому вытащил его прямо из SDK.Затем я получаю эту странную ошибку:

ld64: in /usr/local/arm-apple-darwin/lib/libc.dylib, can't re-map file, errno=22

В этот момент я сделал все, что мог придумать.Я взял свежую копию своей папки / usr / lib со своего iphone и подтвердил, что libSystem.dylib (и libSystem.B.dylib) там не было.Я распаковал сырой пакет .ipsw для iOS 4.2.1 и снова не смог найти там копию libSystem.dylib.Я распаковал iPhoneSDK и MacOS SDK, и мне удалось найти его копию в обоих, но эта ошибка продолжала сохраняться.Я скопировал libSystem.dylib, libSystem.B.dylib, перепробовал все виды комбинаций переименования в libc.dylib и до сих пор ничего, кроме ошибок.Я не могу найти способ распознать файл и создать ссылку на него.Я также попытался установить соединение с libc.a, находящимся в iphone SDK, но это тоже не сработало.Я проверил, что ./xgcc запускалось, и это была моя недавно созданная копия arm-apple-darwin-ld64, которая должна быть в порядке.

Немного предыстории здесь.Я собрал LLVM + Clang 2.8 без ошибок и перестроил ODCCTools с небольшими изменениями, чтобы он скомпилировался на Cygwin (я опубликую свои изменения в патче вместе с руководством, если смогу заставить это работать)Я также взял проекты iphone-dev «include» и «csu», и те, что были успешно завершены, хотя на самом деле в них нет никакого смысла, так как я не могу заставить его связываться с crt0.a.У меня заканчиваются идеи.

Кто-нибудь может мне помочь в этом?

1 Ответ

0 голосов
/ 08 марта 2011

Я думаю, что, возможно, обнаружил ошибку.Глубоко внутри ODCCTools, внутри ld.cpp в строке 2905 не удалось повторно сопоставить файл (отсюда и замечательное сообщение).Поскольку файл был достаточно маленьким, чтобы не беспокоиться об этом, я просто временно удалил это переназначение и просто переадресовал указатель.Я потрачу немного времени и придумаю лучшее решение для долгосрочного решения (и патч для ODCCTools для работы под Cygwin).

Если все пойдет по плану, у меня будет компилятор GCCкросс-компиляция для iPhone под Cygwin позже сегодня вечером.

...