【问题标题】:iOS Compiling (armv7, i386) of several libs. Configure Script: C preprocessor fails sanity checkiOS 编译几个库(armv7、i386)。配置脚本:C 预处理器未通过完整性检查
【发布时间】:2012-01-18 16:36:04
【问题描述】:

我一直在为 iOS 做很多不同库的交叉编译,直到 iOS5 都没有问题。好的,显然我的问题是,iOS5 SDK 不再包含 GNU gcc 编译器。只有 llvm 和 clang 可用。

我的问题是,我无法再运行任何库的“配置”脚本。它总是失败:

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 "expat-bugs@libexpat.org"
| /* 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 "expat-bugs@libexpat.org"
| /* 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 --prefix=$INSTALL_DIR --disable-shared --enable-static --host=arm-apple-darwin

我想指出,这个确切的问题发生在我所有使用配置脚本的库中。仅举几例:apr、apr-util、expat、log4cxx 等...我什至不确定所需的输出应该是什么。代码中间只有一个奇怪的“语法错误”。难怪它不编译:)。

我们将不胜感激有关如何进行操作的帮助和提示。 谢谢。

【问题讨论】:

  • 好的,如果我手动将-E 添加到引发错误的 gcc 调用中,我实际上可以跳过此错误。但随后它会遇到下一个:)。

标签: compilation ios5 preprocessor cross-compiling configure


【解决方案1】:

我遇到了同样的问题。经过一番戳,我的问题原来是我明确设置了CPP。不要设置它(事实上,如果设置了它,就'取消'它)。如果未设置,configure 默认尝试$CC -E。如果它设置,configure 不会自动添加-E。此外,将CPPFLAGS 设置为-E 也不起作用,因为这些标志也会传递给其他步骤。

【讨论】:

  • 完美。我不得不取消设置 CPP 和 CPPFlags。感谢一百万它现在工作正常。
  • 那么系统怎么用哪个编译器(因为你是交叉编译)?也许我在这里遗漏了什么?
猜你喜欢
  • 2013-02-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-09-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多