解决CMU-15-213-ICS的部分lab在部分64位系统WSL中btest无法运行的问题

https://www.cnblogs.com/wr786/p/13818000.html

背景

这学期在学ICS课,有部分同学表示用64位系统的WSL make btest之后./btest 会报出如上的错误。

通过搜索引擎搜索,网络上大部分都将这个原因归结为系统问题,需要使用32位系统才行。

但是,今宵我初读CSAPP(《没人理解计算机系统》)时,在第3版第27页2.1.2 字数据大小这节中看到

大多数64位机器也可以运行为32位机器编译的程序,这是一种向后兼容。因此,举例来说,当程序prog.c用如下伪指令编译后
linux > gcc -m32 prog.c
该程序就可以在32位或64位机器上正确运行。另一方面,若程序用下述伪指令编译
linux > gcc -m64 prog.c
那就只能在64位机器上运行。

这里的“大多数”引起了我的注意,这不就和要解决的问题一样吗?

解决方法

找到btest.c同目录下的Makefile文件并编辑为:

Copy

#
# Makefile that builds btest and other helper programs for the CS:APP data lab
# 
CC = gcc
CFLAGS = -O -Wall -m64 # 只要修改这行,将-m32换成-m64即可
LIBS = -lm

all: btest fshow ishow

btest: btest.c bits.c decl.c tests.c btest.h bits.h
	$(CC) $(CFLAGS) $(LIBS) -o btest bits.c btest.c decl.c tests.c

fshow: fshow.c
	$(CC) $(CFLAGS) -o fshow fshow.c

ishow: ishow.c
	$(CC) $(CFLAGS) -o ishow ishow.c

# Forces a recompile. Used by the driver program. 
btestexplicit:
	$(CC) $(CFLAGS) $(LIBS) -o btest bits.c btest.c decl.c tests.c 

clean:
	rm -f *.o btest fshow ishow *~

修改完之后,在WSL中

Copy

make clean all ./btest

可以看见btest正常运行,至此,问题解决。

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值