2012-04-12 104 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 
相關問題