mips編譯
『壹』 MIPS匯編語言什麼匯編器編譯,在哪可以下載。
linux 自帶的GCC編譯器
『貳』 MIPS匯編的編譯環境怎麼搭建,謝
1、下載binutils並解壓,binutils為GNU工具集;
2、在binutils同級目錄創建build文件夾;
3、在build中執行命令:../binutils/configure --target=mips-elf && make && make install
4、更多編譯信息可以使用../binutils/configure --help查看,一般還需要加前綴名和安裝路徑;編譯平台為linux,或者cygwin平台執行上述命令;安裝完成後,as即為匯編命令。
『叄』 希望大神解釋一下關於匯編語言MIPS
a:.word-12
這條指令。是分配一個word類型的空間給變數a,並初始化成-12。其具體的地址,在編程的時候「不知道」。必須在整個匯編程序匯編完之後,連接,並可能「重定位」,這些變數的地址才會真正知道。
編譯時,開發工具通常都會生成類似於「.map」和「.lst」之類的文件,裡面會有詳細的變數和函數之類的地址信息。具體文件,得查閱MIPS匯編程序開發工具的相關手冊(抱歉,我手邊沒有)。
有問題繼續交流,謝謝。
『肆』 如何設置mips-linux-gcc編譯32位
編譯64位程序,不一定要編譯機器是64位的,但是32位機器默認安裝的gcc編譯環境還是不能用來編譯64位程序。 編譯64位程序,需要加上-m64編譯器參數,默認安裝的gcc已經支持該參數,但是缺少64位機器指令相關的文件,所以不能編譯
『伍』 android ndk怎麼編譯基於mips架構的開源C++庫
------解決方案--------------------1
mipsel 表示 小端編譯
mips 的編譯器表示 默認大端編譯,
如果 mips 是小端模式的, 用 mipsel 編譯是沒有問題的。
你用 file 命令看看平台上跑的程序是不是 LSB 格式的 。
另外, 也可以下載新的 android 代碼, 直接編譯 mips 版本的, 然後再在這個環境下編譯C++庫。
------解決方案--------------------2
1. mips-linux-gnu 默認編譯出來的就是大端模式。
mips-linux-gnu -EL 編出來的小端模式。
2. 你的平台是小端模式, 所以可以直接編譯的。
3. android ndk r8 應該編譯不了大端模式。
『陸』 如何在mips架構編譯docker之github源碼動態編譯
經過研究docker的官方編譯腳步,發現本地編譯也很簡單,只需要在docker源碼的目錄下執行如下命令即可: ./hack/make.sh binary 上面這條命令就只會生成docker的二進制文件,不過肯定不會這么順利的,執行這個命令你就會發現錯誤。如果第一次執行...
『柒』 如何構建MIPS交叉編譯工具鏈
運行環境:Ubuntu12.04
PC提前安裝庫:flex,bison,libncureses5-dev,texinfo,這些庫提前apt-get install。
需要重新安裝:gawk(先apt-get remove mawk, 然後apt-get install gawk,工具鏈構建完成後可恢復)。
交叉編譯需要軟體包,幾乎都可以在GNU下載得到:
binutils-2.22:GNU的工具包;
gcc-4.6.2:GCC;
glibc-2.14:GNU的C庫;
glibc-ports-2.14:GNU的C庫的補丁;
gmp-5.0.4:GNU的數學運算庫;
mpc-0.9:GNU的復數運算庫;
mpfr-3.0.1:GNU的浮點運算庫。中mpfr依賴於gmp,mpc依賴於mpfr與gmp;
linux-2.6.38(用來編譯Linux內核以及提供相應頭文件)。
第一步 創建目錄以及環境變數
在當前用戶目錄下創建target-project文件夾,在該文件夾下創建mips-mole文件夾,在mips-mole文件夾下創建三個文件夾:build-tools,kernel,tools,最後,在build-tools文件夾下創建build-gcc,build-boot-gcc,build-glibc,build-binutils文件夾。命令如下:
$ cd ~
$ mkdir -p ./target-project/mips-mole/{kernel/,tools/,build-tools/{build-gcc,build-boot-gcc,build-glibc,build-binutils}}
$ tree ./target-project/mips-mole/
觀察目錄結構,如下圖:
使用腳本構建環境變數,腳本內容如下圖:
注意修改/home/用戶名,修改正確後,使用source使腳本生效
$ cd target-project
$ chmod +x mips.sh
$ source mips.sh
可以使用echo査看相關變數名以觀察環境變數是否生效。
最後把linux-2.6.38.tar.bz2下載放置在kernel文件夾下,binutils-2.22.tar.gz,gcc-4.6.2.tar.gz,glibc-2.14.tar.gz,glibc-ports-2.14.tar.gz,gmp-5.0.4.tar.gz,mpc-0.9.tar.gz,mpfr-3.0.1.tar.gz下載放置在build-tools文件夾下。
第二步 安裝基於MIPS的linux頭文件
$ cd $PRJROOT/kernel
$ tar -xjvf linux-2.6.38.tar.bz2
$ cd linux-2.6.38
在指定路徑下創建include文件夾,用來存放相關頭文件。
$ mkdir -p $TARGET_PREFIX/include
保證linux源碼是干凈的。
$ make mrproper
生成需要的頭文件。
$ make ARCH=mips headers_check
$ make ARCH=mips INSTALL_HDR_PATH=dest headers_install
將dest文件夾下的所有文件復制到指定的include文件夾內。
$ cp -rv dest/include/* $TARGET_PREFIX/include
最後刪除dest文件夾
$ rm -rf dest
$ ls -l $TARGET_PREFIX/include
査看生成的include文件夾,如下圖:
第三步 安裝binutils-2.22
$ cd $PRJROOT/build-tools
$ tar -xzvf binutils-2.22.tar.gz
$ cd build-binutils
$ ../binutils-2.22/configure --target=$TARGET --prefix=$PREFIX
$ make
$ make install
我在安裝binutils-2.22時會產生這樣一個bug,如下圖所示:
錯誤原因就是-Werror,把warning當成error處理,需要修改相關位置的Makefile文件。而經過察看後,發現binutils都是automake,因此需要重新automake。class="keylink">+bGFzcz0="brush:java;">$ tar -xzvf autoconf-2.64.tar.gz $ cd autoconf-2.64 $ ./configure $ make $ sudo make install
再安裝automake。
$ tar -xzvf automake-1.11.1.tar.gz
$ cd automake-1.11.1
$ ./configure
$ make
$ sudo make install
下面開始修改相關文件,主要是去掉-Werror。
$ cd $PRJROOT/build-tools/binutils-2.22/gas
$ gedit configure
將下面內容
# Enable -Werror by default when using gcc
if test "${GCC}" = yes -a -z "${ERROR_ON_WARNING}" ; then
ERROR_ON_WARNING=yes
fi
修改為
# Enable -Werror by default when using gcc
if test "${GCC}" = yes -a -z "${ERROR_ON_WARNING}" ; then
ERROR_ON_WARNING=no
fi
但是,需要重新configure生成Makefile.in。
$ ./configure (在binutils/gas路徑下的configure)
$ make distclean (切記)
然後重新執行第三步,這次編譯可過。
最後,$ ls $PREFIX/bin,如下圖:
第四步 安裝gcc引導器
$ cd $PRJROOT/build-tools
$ tar -xzvf gcc-4.6.2.tar.gz
$ tar -xjvf gmp-5.0.4.tar.bz2
$ mv gmp-5.0.4 ./gcc-4.6.2/gmp
$ tar -xzvf mpc-0.9.tar.gz
$ mv mpc-0.9 ./gcc-4.6.2/mpc
$ tar -xzvf mpfr-3.0.1.tar.gz
$ mv mpfr-3.0.1 ./gcc-4.6.2/mpfr
$ cd build-boot-gcc
$ ../gcc-4.6.2/configure --target=$TARGET --prefix=$PREFIX --disable-shared
--without-headers --with-newlib --enable-languages=c --disable-decimal-float
--disable-libgomp --disable-libmudflap --disable-libssp --disable-threads --disable-multilib
編譯並安裝gcc引導器、libgcc庫。
$ make all-gcc
$ make all-target-libgcc
$ make install-gcc
$ make install-target-libgcc
第五步 編譯glibc
$ cd $PRJROOT/build-tools
$ tar xzvf glibc-2.14.tar.gz
$ cd glibc-2.14
刪除Makefonfig文件中的內容-lgcc_eh。
$ cp -v Makeconfig{,.bk}
$ sed -e 's/-lgcc_eh//g' Makeconfig.bk > Makeconfig
$ cd ..
$ tar -xjvf glibc-ports-2.14.tar.bz2
$ mv glibc-ports-2.14 ./glibc-2.14/ports
$ cd build-glibc
$ CC=mipsel-linux--gcc ../glibc-2.14/configure --host=$TARGET --prefix="/usr"
--enable-add-ons --with-headers=$TARGET_PREFIX/include libc_cv_forced_unwind=yes
libc_cv_c_cleanup=yes
注意:此時如何設置了LD_LIBRARY_PATH環境變數會configure error,需要刪除該變數重新configure。
$ make
$ make install_root=$TARGET_PREFIX prefix=」」 install
第六步 完全安裝gcc
首先,也是很重要的是去掉libc等庫文件的絕對路徑。
$ cd $TARGET_PREFIX/lib
備份一下。
$ cp libc.so libc.so.bk
$ gedit libc.so
將原內容
GROUP ( /lib/libc.so.6 /lib/libc_nonshared.a AS_NEEDED ( /lib/ld.so.1 ) )
修改為
GROUP ( libc.so.6 libc_nonshared.a AS_NEEDED ( ld.so.1 ) )
$ cp libpthread.so libpthread.so.bk
$ gedit libpthread.so
將原內容
GROUP ( /lib/libpthread.so.0 /lib/libpthread_nonshared.a )
修改為
GROUP ( libpthread.so.0 libpthread_nonshared.a )
然後可以完全編譯gcc。
$ cd $PRJROOT/build-tools/build-gcc
$ ../gcc-4.6.2/configure --target=$TARGET --prefix=$PREFIX --enable-languages=c,c++
$ make all
$ make install
注意,編譯或者在qemu模擬的時候一定要指定相關庫文件的路徑。
完全安裝gcc,$ ls $PREFIX/bin,如下圖:
編譯任意C文件。
$ mipsel-linux-gcc -o test test.c (注意需要設置環境變數或者source mips.sh)
$ file test
『捌』 怎麼編譯Mips 開發板 上可以使用的Node
mips是big-endian的mips架構 mipsel是little-endian的mips架構。 他們之間的區別就是內存中存放的數據的位元組順序相反,也就是把低位放在低地址還是高地址。
『玖』 mips-linux-uclibc-gcc 怎麼編譯64位程序
理論上安裝支持環境,之後 64 位的 gcc 編譯成 32 位程序,就加 -m32 參數即可。當然還一個辦法是裝個 32 位的 gcc 。
另外,交叉編譯也適用於 x86 架構。
不過這么編譯經常會出現各種問題,所以編譯 32 位的程序,最好還是用 32 位系統。
不一定重裝,用 chroot 和 setarch 命令配合即可弄出一個 32 位的子系統。
『拾』 在Ubuntu下搭建好了MIPS交叉編譯環境,可是怎麼用啊
把makefile里的 gcc 改mips-linux-gcc,具體的名字要看你的mips的交叉編譯器的名字