2012-04-12 66 views
4

我在OS X上构建了一个x86_64-elf内核。我的构建系统是autotools。我成功编译的gcc为x86_64的小精灵在交叉编译在OS X当我运行从自动工具生成的配置脚本我有一个问题:autotools:C编译器无法创建可执行文件

configure: error: C compiler cannot create executables 
See `config.log' for more details 

所以我看config.log的看到:

cannot find crt0.o: No such file or directory 
collect2: error: ld returned 1 exit status 

这非常合理。交叉编译器不会生成可执行文件,因为没有关联的运行时。但是我不需要或者不想让我的编译器生成一个可执行文件,我会将其适当地链接到我的引导程序。我如何告诉autotools不检查这个?

+0

难道你不能只在你的'configure.ac'脚本中设置'CC'变量吗?但它可能无法正常工作,因为其他测试可能会创建脚本尝试运行的可执行文件。 – 2012-04-12 14:22:04

+0

我在运行configure时设置了CC变量,它在configure.ac中的设置非常糟糕。无论如何,这并没有回答我如何让它停止检查编译器是否可以创建可执行文件的问题。 – dschatz 2012-04-12 14:34:44

+0

告诉configure你正在交叉编译。使用'./configure --host = x86_64-unknown-linux'。如果构建类型与主机类型不同,某些测试可能会被跳过。 – 2012-04-12 16:00:32

回答

0

尝试:

DARWIN_VERSION_FULL=darwin`uname -r` 
./configure --build=x86_64-apple-${DARWIN_VERSION_FULL} --host=x86_64-unknown-linux 

现在configure应该是交叉编译模式,并停止运行测试。

+0

不会改变任何东西。对于它的价值,我不是为x86_64-unknown-linux构建的,而是为x86_64-elf构建的。 – dschatz 2012-04-12 19:33:11

+0

您是否将环境变量(例如CC,LD等)设置为指向交叉编译器? – ldav1s 2012-04-13 23:20:59

2

确保当您运行配置脚本(将其添加到CFLAGS环境变量),您应指定下列事项GCC标志:

-nostdlib -nostartfiles -nodefaultlibs -ffreestanding 

如果你不知道如何将这些追加到尾部的CFLAGS,请尝试类似于:

export CFLAGS=$CFLAGS -nostdlib -nostartfiles -nodefaultlibs -ffreestanding 
相关问题