簡體   English   中英

如何在x86上為Sun4v交叉編譯GCC?

[英]How to cross compile GCC on x86 for Sun4v?

我正在使用C ++編寫一個編程作業。 本課程的講師要求在UNIX服務器上編譯和運行所有代碼。 該服務器是SunOS機器。 我用GCC 5.2在我的個人筆記本電腦上編寫了所有代碼,它支持大多數C ++ 11功能。 但是,當我將代碼上傳到服務器並嘗試編譯時,我驚奇地發現服務器上的g ++版本是4.2.1,它是在2007年中期發布的。 許多C ++ 11功能都不受支持。 即使是-std參數也不被接受。

我試着下載最新GCC的源代碼並在服務器上編譯它。 不幸的是,每個帳戶的磁盤配額限制為500M。 我只是想知道是否可以在我的x86機器上交叉編譯GCC並將二進制文件上傳到服務器,以便我可以編譯我的C ++代碼。

順便說一句,我已經聯系了IT部門關於更新軟件,但他們回答說他們在不久的將來沒有這樣的計划。

我確實在互聯網上研究過交叉編譯,並找到了幾個教程。 但他們並不容易理解。 除了二進制文件之外,還有很多依賴項,如頭文件和庫。 所以在我放棄並修改我的代碼以適應舊編譯器之前,有人能給我一些建議嗎?

謝謝。

uname -a返回以下結果

SunOS 5.10 Generic_147147-26 sun4v sparc SUNW,T5240

當然這是可能的,這是你在編寫操作系統時通常做的事情。

首先, 您還需要在工具箱中使用binutils 一旦你擁有了所有神聖的來源,讓我們做好准備吧!

export PREFIX="$HOME/opt" # All the stuff will get installed here!
export TARGET=sparc-sun-solaris  # I'm not *100%* sure if this is correct, check it yourself
export PATH="$PREFIX/bin:$PATH"  # If you forget this/close the terminal, you're doomed!

現在,讓我們來看看這個小怪物......應該建造binutils!

cd $HOME/src # Or where you have the sources
mkdir binutils-build
cd binutils-build
../binutils-src/configure --target=$TARGET --prefix="$PREFIX" --disable-nls
make
make install

--disable-nls禁用對本機自然語言的支持(也就是說:編譯器以您自己的語言打印錯誤!),並且只使用英語作為消息。 這不是必須的,但它肯定會加快構建binutils的過程。

現在,編譯GCC本身是一個非常脆弱的過程,它無論如何都會失敗,所以要做好准備! 這個過程很 (在某些機器上可能需要長達一個小時),但請相信我,LLVM + Clang更糟糕;)。

cd $HOME/src
cd gcc-src
./contrib/download_prerequisites # Get GMP, MPFR, and MPC
cd ..
mkdir gcc-build
cd gcc-build
../gcc-src/configure --target=$TARGET --prefix="$PREFIX" --disable-nls --enable-languages=c,c++
make all-gcc
make all-target-libgcc
make install-gcc
make install-target-libgcc

如果你不進入的問題,同時編制(相信我,你除非你對這個世界太幸運了),你就會有你的機器上運行的工具鏈,但編譯用於Sun / SPARC! BTW, - --enable-languages=c,c++意味着GCC將支持編譯C和C ++代碼。 沒有更少,僅此而已。 嘗試用...

sparc-sun-solaris-g++ --version

現在,如果你想獲得服務器上運行的服務器的編譯器,你將不得不加倍於加拿大的雙十字架 基本上,你要做的是......

export PREFIX="$HOME/some-holy-directory" # This path *must* be the same for both your machine and the target server!
export HOST=$TARGET

然后再次重復編譯過程,記住在兩個configure腳本中添加選項--host=$HOST 完成后,您必須將位於完全相同位置的some-holy-directory移動到服務器中。 如果它不適合500MB,那么,問問你的老師你是否至少可以在你自己的機器上編譯作業,然后將它們上傳到服務器。 否則,您將被排除在C ++ 98之外。

順便說一句 :請注意,交叉編譯GCC本身是一個更加脆弱的過程。 所有這些帖子都只是理論上的,因為我不會僅僅為了這個目的而做所有這些步驟。 如果您有任何重大問題,或者有人在步驟中發現錯誤,請發表評論;)。

編輯 :顯然,你必須建立Glibc和所有那些時髦的東西......

我希望這對你有所啟發!

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM