日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 运维知识 > linux >内容正文

linux

mips linux 编译,Linux环境下mips-gcc编译

發(fā)布時(shí)間:2024/3/26 linux 50 豆豆
生活随笔 收集整理的這篇文章主要介紹了 mips linux 编译,Linux环境下mips-gcc编译 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

背景

在之后的學(xué)習(xí)中,需要在自己的mips架構(gòu)cpu上編寫一系列工具。不想使用mips匯編代碼編寫這些工具,希望使用c語言編寫,并編譯為mips機(jī)器語言。所以這次編譯沒有編譯c庫(不能使用自帶的頭文件),僅僅編譯了gcc編譯器。

搭建環(huán)境

系統(tǒng):Ubuntu 16.04 LTS版本

前期準(zhǔn)備

在主目錄~下進(jìn)行編譯。

編譯好的文件放在(安裝在)~/gcc-mips文件夾下

1、從鏡像源上下載binutils

sudo wget http://mirrors.ustc.edu.cn/gnu/binutils/binutils-2.29.tar.xz

(一開始以為2.9版本是最高的,因?yàn)樗帕性阽R像源文件列表的最后,后來發(fā)現(xiàn)是98年的......,編譯時(shí)會(huì)出錯(cuò))

binutils包括as, ld, objdump,objcopy等有用的工具,as是Assembler,ld是linker,由于我們想要將c語言編譯為mips機(jī)器碼,我們需要as和ld支持mips架構(gòu),而系統(tǒng)自帶的僅支持x86

2、從鏡像源上下載gcc源代碼

sudo wget http://mirrors.ustc.edu.cn/gnu/gcc/gcc-7.2.0/gcc-7.2.0.tar.xz

3、從鏡像源上下載gmp,mpc,mpfr

編譯gcc時(shí)需要這些源代碼(否則編譯gcc時(shí)在configure會(huì)出錯(cuò)),可以在編譯完binutils后做

sudo wget http://mirrors.ustc.edu.cn/gnu/gmp/gmp-6.1.2.tar.xz

sudo wget http://mirrors.ustc.edu.cn/gnu/mpc/mpc-1.0.3.tar.gz

sudo wget http://mirrors.ustc.edu.cn/gnu/mpfr/mpfr-3.1.6.tar.xz

4、解壓

tar -xvf gcc-7.2.0.tar.xz

tar -xvf binutils-2.29.tar.xz

tar -xvf gmp-6.1.2.tar.xz

tar -xvf mpc-1.0.3.tar.gz

tar -xvf mpfr-3.1.6.tar.xz

編譯binutils

1、進(jìn)入binutils文件夾,并進(jìn)行配置

cd binutils-2.29

./configure --target=mips --prefix=主目錄/mips-gcc (主目錄替換為具體的主目錄/home/xxx)

--target指定了目標(biāo)的架構(gòu),--prefix指定了make install安裝的地址。最后可執(zhí)行程序會(huì)放在prefix/target/目錄下,在這里是主目錄/mips-gcc/mips目錄下

如果configure階段顯示出錯(cuò),可能是缺少某些程序,可以嘗試根據(jù)錯(cuò)誤信息用apt-get獲取相應(yīng)的程序

2、編譯與安裝

make -jN (N替換為CPU核數(shù)*2)

make install

make所花時(shí)間大概在10分鐘以內(nèi)

完成后可以在/gcc-mips/mips中看到as,ar等程序

編譯gcc

1、準(zhǔn)備工作

我們先進(jìn)入解壓出來的gcc目錄

cd gcc-7.2.0

gcc編譯的過程中,會(huì)在gcc-7.2.0這個(gè)文件夾下尋找一系列程序的源代碼進(jìn)行編譯,比如我們之前下載的gmp,mpc,mpfr等。接下來我們把之前解壓出來的文件夾放到gcc-7.2.0目錄下

mv -v ../gmp-6.1.2 gmp

mv -v ../mpfr-3.1.6 mpfr

mv -v ../mpc-1.0.3 mpc

2、配置

./configure --target=mips --prefix=主目錄/mips-gcc

注意之前編譯binutils生成的as,ar等執(zhí)行文件需要放在prefix/target/bin目錄下,在這里為主目錄/mips-gcc/mips/bin目錄下

3、編譯

make的過程分為4部分

Build host tools necessary to build the compiler.

Build target tools for use by the compiler such as binutils (bfd, binutils, gas, gprof, ld, and opcodes) if they have been individually linked or moved into the top level GCC source tree before configuring.

Build the compiler (single stage only).

Build runtime libraries using the compiler from the previous step.

我們?nèi)绻恍枰狢語言庫文件的話只需要進(jìn)行前3步

第一步ubuntu系統(tǒng)已經(jīng)幫我們準(zhǔn)備好了編譯gcc需要的一系列程序

第二步在編譯binutils時(shí)已經(jīng)完成

我們僅需要編譯compiler

make all-gcc -jN (N為CPU核數(shù)*2)

make install-gcc

make所花時(shí)間很長(zhǎng)大概要一個(gè)小時(shí)多

之后在主目錄/mips-gcc/bin下可以看見mips-gcc等工具

測(cè)試

測(cè)試用程序:

//a.c

void _start()

{

}

cd 主目錄/mips-gcc/bin

mips-gcc a.c -S a.s

//將C語言轉(zhuǎn)為at&t格式的匯編程序

mips-gcc a.c -o a.out

//將C語言轉(zhuǎn)為elf格式的可執(zhí)行文件

mips-objcopy -O binary -j.text a.out a.bin

//將可執(zhí)行文件中程序段提取出來以2進(jìn)制形式放入a.bin文件中

可以使用軟件查看a.s,a.bin中的內(nèi)容

遺留問題

繼續(xù)編譯c語言運(yùn)行庫時(shí)出現(xiàn)了問題,懷疑是沒有下載glibc。

參考資料:

總結(jié)

以上是生活随笔為你收集整理的mips linux 编译,Linux环境下mips-gcc编译的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。