系统之家
您现在的位置是:系统之家 > Ubuntu之家 > Ubuntu技巧 > 内容 RSS

在ubuntu上安装编译MIPS指令的包Sourcery CodeBench

时间:2017-06-15 出处:系统之家 复制分享 人气(次) 【

为了编译《计算机组成与设计-硬件/软件接口》上的程序,然而UbuntuX86上的gcc只能编译成X86汇编。

Sourcery CodeBench出了一个gcc工具链用于编译为MIPS汇编。

有收费版和免费版,我用的是免费版。

https://sourcery.mentor.com/GNUToolchain/subscription3537?lite=MIPS

在这里找到下载最新版本。

有两个版本:GNU/Linux版本和ELF版本

我下载的是https://sourcery.mentor.com/GNUToolchain/release3133

参考文档:https://sourcery.mentor.com/GNUToolchain/doc22952/getting-started.pdf

两个版本区别见最底下注1。


右键勾上可执行的权限。

命令行执行:

$ ./mips-2015.11-32-mips-linux-gnu.bin

然而没法执行。寻求各种文档各种问答。找到解决方法:

Since 12.04 Ubuntu introduced Multi Arch (https://wiki.ubuntu.com/MultiarchSpec) and removed ia32-libs ia32-libs-gtk packages from the repository. To install 32-bit libs you need the run the following command line

ubuntu在12.04后,移除了32位的库,因此我们得安装:

命令行如下:

$ sudo dpkg --add-architecture i386 
$ sudo apt-get update 
$ sudo apt-get install libgtk2.0-0:i386 libxtst6:i386 gtk2-engines-murrine:i386 lib32stdc++6 libxt6:i386 libdbus-glib-1-2:i386 libasound2:i386

如果不能安装,出现“Hash 校验和不符”或者“发生故障,这可能是有软件包被要求保持现状的缘故。”,请跳到最后注2。


安装32位库后,我们可以打开该文件了bin。

然后按照指示进行安装即可。Ubuntu的话,取消在桌面生成图标。

如果中途失败退出了,请再运行一次,安装在同一目录下即可继续安装。

安装后,重启,命令行输入mips-linux-gnu-gcc -v可以看到结果。

mips-的参数可见https://gcc.gnu.org/onlinedocs/gcc/MIPS-Options.html


#include<stdio.h> 
int main(){ 
printf("hello"); 


.file   1 "hello.c" 
.section .mdebug.abi32 
.previous 
.nan    legacy 
.module fp=32 
.module oddspreg 
.abicalls 
.option pic0 
.rdata 
.align  2 
$LC0: 
.ascii  "hello\000" 
.text 
.align  2 
.globl  main 
.set    nomips16 
.set    nomicromips 
.ent    main 
.type   main, @function 
main: 
.frame  $fp,32,$31      # vars= 0, regs= 2/0, args= 16, gp= 8 
.mask   0xc0000000,-4 
.fmask  0x00000000,0 
.set    noreorder 
.set    nomacro 
addiu   $sp,$sp,-32 
sw  $31,28($sp) 
sw  $fp,24($sp) 
move    $fp,$sp 
lui $2,%hi($LC0) 
addiu   $4,$2,%lo($LC0) 
jal printf 
nop 
move    $2,$0 
move    $sp,$fp 
lw  $31,28($sp) 
lw  $fp,24($sp) 
addiu   $sp,$sp,32 
j   $31 
nop 
.set    macro 
.set    reorder 
.end    main 
.size   main, .-main 
.ident  "GCC: (Sourcery CodeBench Lite 2015.11-32) 5.2.0" 


注一:


注2:出现这种情况是因为被墙了。重新选择新的源。

最后,他给我选择了个香港的源。不知道是不是我修改了hosts的原因。


相关资讯
最新资讯
热门内容
Ubuntu在vmare虚拟机无法上网的解决方法