2014-08-29 189 views
2

在我的64位Solaris中,默認情況下,我的gcc默認會生成32位可執行文件(用於生成64位可執行文件,需要添加「-m64」編譯選項)。在我的64位Linux中,我的gcc默認會生成64位可執行文件。我試圖找到gcc website的原因,但不幸的是,有很多相關的選項(--with-arch,--with-cpu,--with-abi等)。從文檔中,我看不出哪些可以確定生成32位或64位可執行文件。gcc如何確定默認情況下是否生成32位或64位可執行文件?

任何人都可以在這個問題上提供一些建議嗎?

回答

2

這取決於編譯器是如何安裝的,這真的歸結爲分發和可能的安裝選項。如果有任何疑問和需要確定,只需包含-m選項;當32位是默認值時使用-m32並且64位是默認值時使用-m64也是如此。

+0

哪些安裝選項? – 2014-08-29 01:54:05

+0

這是非常分佈特定的。你想達到什麼目的?只需自動檢測默認值? – ash 2014-08-29 01:56:26

+0

嘗試'gcc -dumpspecs'以查看是否提供了所需的信息。 – ash 2014-08-29 01:58:40

1

在編譯gcc時,可以使用--target選項指定要爲其生成編譯器的適當系統。要知道GCC支持的所有目標,可以通過gcc/config /文件夾檢查gcc/configure文件或oogle。一旦生成編譯器,「編譯」命令(即gcc source.c -o object.o)將始終爲您編譯gcc的默認目標生成對象。

但是,您可能能夠爲指定目標周圍的各種變體生成對象。例如。您可以爲64位系統生成32位和64位二進制文​​件。

作爲示例,配置--target = mips64-elf將爲64位mips目標生成gcc編譯器。編譯器生成後,無論何時輸入gcc -c source.c -o object.o,都會生成一個64位的mips目標文件。

所以,如果你在你的兩個系統上鍵入gcc -v,你會看到gcc是如何配置的,並且應該回答你的問題。

+1

的特定安裝配置不會改變gcc的默認行爲,它會設置makefile使用合適的gcc選項。手動輸入的任何'gcc -c source.c -o object.o'都會使用默認選項。 – pqnet 2014-08-29 02:37:56

+0

gcc makefile不使用gcc - 它使用系統編譯器構建gcc(可能是某種其他版本的gcc,或者可能是其他編譯器)。當你運行configure來構建gcc時,你需要指定你正在構建的gcc的默認目標應該是什麼。 – 2014-08-29 06:37:22

+0

@ChrisDodd:除非你使用'--disable-bootstrap'配置GCC,或者如果你的GCC是一個交叉編譯器,一個默認的GCC直接編譯器會在幾個階段編譯,所以安裝的二進制文件確實是由「自身」 (*相同* GCC,實際上在前一階段) – 2014-08-29 07:37:45

0

在您提到的document處,請grep for「enable-targets」選項。

相關問題