При попытке скомпилировать фиктивную программу для iphoneos, Xcode4, gcc не выходит за пределы исходного каталога sysroot
$ echo $ISYSROOT
/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS5.1.sdk
$ gcc -arch armv6 --sysroot=$ISYSROOT test.cpp
ld: in /usr/lib/system/libcache.dylib, missing required architecture armv6 in file for architecture armv6
collect2: ld returned 1 exit status
Если я оставлю вне профиля,
$ gcc -arch armv6 test.cpp
ld: warning: ignoring file /usr/lib/crt1.o, missing required architecture armv6 in file
ld: warning: ignoring file /usr/lib/libgcc_s.1.dylib, missing required architecture armv6 in file
ld: warning: ignoring file /usr/lib/libSystem.dylib, missing required architecture armv6 in file
Undefined symbols for architecture armv6:
"start", referenced from:
-u command line option
ld: symbol(s) not found for architecture armv6
collect2: ld returned 1 exit status
Следующие работы, но он чувствует себя очень дрянным и не масштабируемым. Что здесь происходит?
$ gcc -arch armv6 -L$ISYSROOT/usr/lib/system --sysroot=$ISYSROOT test.cpp
Обновление. По-видимому, это известная проблема, хотя до сих пор неясно, как передавать sysroot в gcc, но isysroot на ld
http://www.doitscared.com/?m=201104
При компиляции библиотеки, если вы видите эту ошибку "ld: file not found: /usr/lib/system/libcache.dylib для архитектуры armv7", то ваш Команда компоновщика использует "-sysroot", которая не работает в Xcode 4. Вместо этого измените команду компоновщика на использование "-isysroot". (Примечание: это применяется только к команде компоновщика. Команды компиляции должны продолжаться использовать "-sysroot". Подробнее см. Здесь.)