今天下午按照既定配置交叉编译miniGui 的时候遇到了一个问题:
error: C compiler cannot create executables
[root]@libminigui-1.6.10#./buildlib-uclinux-44b0x.sh
checking build system type... i386-pc-linux-gnu
checking host system type... arm-elf-linux-gnu
checking target system type... arm-elf-linux-gnu
checking for arm-elf-linux-gcc... arm-elf-gcc
checking for C compiler default output file name...
configure: error: C compiler cannot create executables
See `config.log' for more details.
./buildlib-uclinux-44b0x.sh: line 14: --disable-shared: command not found
./buildlib-uclinux-44b0x.sh: line 16: --disable-lite: command not found
./buildlib-uclinux-44b0x.sh: line 43: --disable-jpgsupport: command not found
[root]@libminigui-1.6.10#
|
人家说了要 See config.log, 那就乖乖的看config.log 吧。
略过前文不叙,转帖出事地段:
configure:2612: checking for C compiler default output file name
configure:2639: arm-elf-gcc -O2 -g -D__linux__ -I/home/air_lcd/uClinux-dist/linux-2.4.x/include -I/home/air_lcd/uClinux-dist/uClibc/include -fno-builtin -nostartfiles -Wall -elf2flt -static -L/home/air_lcds/uClinux-dist/uClibc/lib -L/home/air_lcd/uClinux-dist/linux-2.4.x/lib conftest.c >&5
/usr/local/arm-elf/bin/ld.real: warning: cannot find entry symbol _start; defaulting to 00000000
configure:2642: $? = 0
configure:2680: result:
configure: failed program was:
| /* confdefs.h. */
| #define PACKAGE_NAME ""
| #define PACKAGE_TARNAME ""
| #define PACKAGE_VERSION ""
| #define PACKAGE_STRING ""
| #define PACKAGE_BUGREPORT ""
| /* end confdefs.h. */
|
| int
| main ()
| {
|
| ;
| return 0;
| }
configure:2687: error: C compiler cannot create executables
See `config.log
|
看来config不知道在哪里找了断代码在测试我的交叉编译环境,他没有编译通过!!
cannot find entry symbol _start; defaulting to 00000000
头疼,一个main函数,怎么说没有入口呢?
google了半天, 有的说,gcc 装的失败啦,重装吧。 有的说环境变量弄错了,重新弄吧。我一一否定。但是问题仍然存在。
最后自己写了个程序, 执行
arm-elf-gcc -O2 -g -D__linux__ -I/home/air_lcd/uClinux-dist/linux-2.4.x/include -I/home/air_lcd/uClinux-dist/uClibc/include -fno-builtin -nostartfiles -Wall -elf2flt -static -L/home/air_lcds/uClinux-dist/uClibc/lib -L/home/air_lcd/uClinux-dist/linux-2.4.x/lib conftest.c
|
果然有这个问题。
逐步删除 编译选项。 发现当删除了“ -nostartfiles ” 就正常了。
原来都是 nostartfiles 惹的祸。
man 了一下 gcc
-nostartfiles
Do not use the standard system startup files when linking. The
standard system libraries are used normally, unless -nostdlib or
-nodefaultlibs is used.
|
明白了, 原来nostartfiles 的意思是, 不用main来作为 入口, 难怪他告诉我找不到入口。
OK! 搞定。
遇事一定要沉下心去搞, 另外不要迷信google,浪费时间。
PS 鄙视一下百度。 啥都搜不到。
网上这个错误貌似出现很多。 原因各有不同。反正大致思路就是,config gcc 编译没有通过。