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. Ако го настроя да дрънка, извежда същата грешка. (Само с по-добро представяне на синтактични грешки)

Ето важната част от 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

Опитвам се да разбера това от седмици, но без успех. Чувствам, че други хора трябва да са се сблъсквали с този проблем. Но Google не изведе нищо. За известно време се опитах да използвам gas-preprocessor.pl, но също без успех.

А, моите извиквания за конфигуриране винаги са подобни на това:

./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 изрично. Не задавайте това (и всъщност го „отменете“, ако е зададено). Ако не е зададено, конфигурирането опитва $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