Компиляция iOS (armv7, i386) нескольких библиотек. Настройка сценария: препроцессор C не проходит проверку работоспособности

Я много занимался кросс-компиляцией разных библиотек для iOS и до iOS5 проблем не было. Хорошо, видимо моя проблема в том, что iOS5 SDK больше не включает компилятор GNU gcc. Доступны только llvm и clang.

Моя проблема в том, что я больше не могу завершить запуск скрипта «configure» любой библиотеки. Это всегда терпит неудачу с:

configure: error: C preprocessor 
"/Developer/Platforms/iPhoneOS.platform/Developer/usr/bin/gcc" fails sanity check

Только gcc является символической ссылкой на компилятор llvm. Если я поставлю его на clang, он выдает ту же ошибку. (Просто с более красивым представлением синтаксической ошибки)

Вот важная часть config.log:

configure:3338: checking how to recognise dependent libraries
configure:3514: result: pass_all
configure:3993: checking how to run the C preprocessor
configure:4111: result: /Developer/Platforms/iPhoneOS.platform/Developer/usr/bin/gcc
configure:4135: /Developer/Platforms/iPhoneOS.platform/Developer/usr/bin/gcc -B/Developer/Platforms/iPhoneOS.platform/Developer/usr -arch armv7 -miphoneos-version-min=5.0 -gdwarf-2 -mthumb -isysroot /Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS5.0.sdk -L/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS5.0.sdk/usr/lib/system conftest.c
conftest.c:14: error: expected '=', ',', ';', 'asm' or '__attribute__' before 'error'
configure:4141: $? = 1
configure: failed program was:
| /* confdefs.h.  */
| 
| #define PACKAGE_NAME "expat"
| #define PACKAGE_TARNAME "expat"
| #define PACKAGE_VERSION "2.0.1"
| #define PACKAGE_STRING "expat 2.0.1"
| #define PACKAGE_BUGREPORT "[email protected]"
| /* end confdefs.h.  */
| #ifdef __STDC__
| # include <limits.h>
| #else
| # include <assert.h>
| #endif
|            Syntax error
configure:4135: /Developer/Platforms/iPhoneOS.platform/Developer/usr/bin/gcc -B/Developer/Platforms/iPhoneOS.platform/Developer/usr -arch armv7 -miphoneos-version-min=5.0 -gdwarf-2 -mthumb -isysroot /Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS5.0.sdk -L/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS5.0.sdk/usr/lib/system conftest.c
conftest.c:14: error: expected '=', ',', ';', 'asm' or '__attribute__' before 'error'
configure:4141: $? = 1
configure: failed program was:
| /* confdefs.h.  */
| 
| #define PACKAGE_NAME "expat"
| #define PACKAGE_TARNAME "expat"
| #define PACKAGE_VERSION "2.0.1"
| #define PACKAGE_STRING "expat 2.0.1"
| #define PACKAGE_BUGREPORT "[email protected]"
| /* end confdefs.h.  */
| #ifdef __STDC__
| # include <limits.h>
| #else
| # include <assert.h>
| #endif
|            Syntax error
configure:4210: error: C preprocessor "/Developer/Platforms/iPhoneOS.platform/Developer/usr/bin/gcc" fails sanity check
See `config.log' for more details.

Вот мое окружение. Немного излишне, но с iOS4.X работало нормально.

# Defines
DEVROOT=/Developer/Platforms/iPhoneOS.platform/Developer
SDKROOT=$DEVROOT/SDKs/iPhoneOS5.0.sdk

# BUILD STUFF
export CXXFLAGS="-B/Developer/Platforms/iPhoneOS.platform/Developer/usr -arch armv7 -miphoneos-version-min=5.0 -gdwarf-2 -mthumb -isysroot $SDKROOT -L$SDKROOT/usr/lib/system"
export CPPFLAGS="$CXXFLAGS"
export CFLAGS="$CXXFLAGS"
export CPP=/Developer/Platforms/iPhoneOS.platform/Developer/usr/bin/gcc
export CXXCPP=/Developer/Platforms/iPhoneOS.platform/Developer/usr/bin/g++
#export CXX=/Developer/Platforms/iPhoneOS.platform/Developer/usr/bin/g++
export CC=/Developer/Platforms/iPhoneOS.platform/Developer/usr/bin/gcc
export LD=/Developer/Platforms/iPhoneOS.platform/Developer/usr/bin/ld
export RANLIB=/Developer/Platforms/iPhoneOS.platform/Developer/usr/bin/ranlib
export AR=/Developer/Platforms/iPhoneOS.platform/Developer/usr/bin/ar
export STRIP=/Developer/Platforms/iPhoneOS.platform/Developer/usr/bin/strip
export LIBTOOL=/Developer/Platforms/iPhoneOS.platform/Developer/usr/bin/libtool
export INSTALL_DIR=/Users/mriedel/MPI/CrossCompiling/armv7_dev_install
export CPATH=$INSTALL_DIR/include
export LIBRARY_PATH=$INSTALL_DIR/lib

Я пытался понять это в течение нескольких недель, но безуспешно. Я чувствую, что другие люди, должно быть, столкнулись с этой проблемой. Но гугл ничего не выдал. Какое-то время я пытался использовать gas-preprocessor.pl, но тоже безуспешно.

Ах, мои вызовы configure всегда похожи на это:

./configure --prefix=$INSTALL_DIR --disable-shared --enable-static --host=arm-apple-darwin

Я хочу отметить, что именно эта проблема возникает со всеми моими библиотеками, которые используют сценарии настройки. Вот некоторые из них: apr, apr-util, expat, log4cxx и т. д. Я даже не уверен, каким должен быть желаемый результат. Просто в середине кода странно размещена «Синтаксическая ошибка». Неудивительно, что он не компилируется :).

Помощь и советы о том, как действовать, будут очень признательны. Спасибо.


person rado0x54    schedule 12.12.2011    source источник
comment
Хорошо, если я добавлю -E вручную к вызову gcc, который выдает ошибку, я действительно смогу пропустить эту ошибку. Но затем он упирается в следующий :).   -  person rado0x54    schedule 17.12.2011


Ответы (1)


Я столкнулся с той же проблемой. После некоторого тыка моя проблема оказалась в том, что я устанавливал CPP явно. Не устанавливайте это (и фактически «отключите» его, если оно установлено). Если он не установлен, по умолчанию configure пытается выполнить $CC -E. Если он установлен, configure не добавляет -E автоматически. Кроме того, установка CPPFLAGS на -E не работает, потому что эти флаги также передаются другим шагам.

person Andrew    schedule 30.12.2011
comment
Идеальный. Мне пришлось отключить CPP и CPPFlags. Миллион благодарностей, теперь все работает. - person rado0x54; 08.03.2012
comment
Так как же система, какой компилятор использовать (потому что вы выполняете кросс-компиляцию)? Может быть, я что-то упускаю здесь? - person mfcabrera; 10.05.2012