这花了一段时间才能弄对。在Ubuntu中为ARM目标进行交叉编译时遇到了这个问题。我解决了:
PATH=$PATH:/ccpath/bin CC=ccname-gcc AR=ccname-ar LD=ccname-ld CPPFLAGS="-nostdinc -I/ccrootfs/usr/include ..." LDFLAGS=-L/ccrootfs/usr/lib ./autogen.sh --build=`config.guess` --host=armv5tejl-unknown-linux-gnueabihf
注意CFLAGS不与autogen.sh/configure一起使用,使用它给了我一个错误:“ configure:error:C编译器无法创建可执行文件”。在构建环境中,如果您没有在上面的命令中用./configure替换./autogen.sh脚本,则可以使用提供的autogen.sh脚本。我在目标系统上运行config.guess以获取--host参数。
成功运行autogen.sh/configure后,使用以下命令进行编译:
PATH=$PATH:/ccpath/bin CC=ccname-gcc AR=ccname-ar LD=ccname-ld CPPFLAGS="-nostdinc -I/ccrootfs/usr/include ..." LDFLAGS=-L/ccrootfs/usr/lib CFLAGS="-march=... -mcpu=... etc." make
我选择使用的CFLAGS是:“ -march = armv5te -fno-tree-vectorize -mthumb-interwork -mcpu = arm926ej-s”。要正确设置所有包含目录,需要花费一些时间:您可能希望某些包含指向交叉编译器的包含,而某些指向根文件系统包含的指向,并且可能会发生一些冲突。
我确信这不是完美的答案。而且我仍然看到Makefiles中的某些包含目录指向/而不是/ ccrootfs。很想知道如何纠正这个问题。希望这对某人有帮助。
export C_INCLUDE_PATH=~/local/include:$C_INCLUDE_PATH
,则编译器将~/local/include
仅在和中搜索$ C_INCLUDE_PATH,前提是编译器未在第一个目录中找到include。