在ubuntu上安装编译MIPS指令的包Sourcery CodeBench Lite for MIPS(交叉编译环境)

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

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

我们平时的编译,叫做本地编译,也就是编译成当前平台下的汇编。相反,交叉编译可以编译成别的平台的汇编(编译的平台和编译出来的程序的平台是不一样的)



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

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

然而没法执行。寻求各种文档各种问答。找到解决方法:https://sourcery.mentor.com/GNUToolchain/kbentry62

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"



参考:https://sourcery.mentor.com/GNUToolchain/release3136

http://askubuntu.com/questions/463457/how-to-find-packages-when-updating-ubuntu-and-creating-standard-source-list-file

http://www.tuicool.com/articles/nAJJVj

http://www.cnblogs.com/zhangpengshou/archive/2009/12/05/1617719.html

http://imgtec.eetrend.com/forum/2371


注一:


注2:出现这种情况是因为被墙了。重新选择新的源,参照这个的第二http://www.cnblogs.com/memory4young/p/ubuntu-apt-get-update-error-hash-sum-mismatch.html

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

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值