CSAPP 3e操作环境搭建

博主的环境:

  1. VMave centos7 环境
  2. win10 ubuntu20.04STL 子系统
    我会在上面这两个环境中搭建,在不同的点会告知,没有对比,说明操作相同。
  3. 建议从头看到尾,在centos7的提到的,可能在ubuntu中不再赘述。

代码获取

第三版代码链接 http://csapp.cs.cmu.edu/3e/code.html
在这里插入图片描述
选择上面红色方框下载 tar

开始搭建(centos7)

  • 把包放在你喜欢的地方,这里我放在了Desktop
    在这里插入图片描述

  • 输入 tar -xf code-all.tar 解压
    在这里插入图片描述

  • 进入到 code 目录里

    sudo cp include/csapp.h /usr/include/
    sudo cp lib/libcsapp64.a /usr/lib
    sudo cp lib/libcsapp64.a /usr/lib64
    

    输入上面3条指令,将库文件移到 /usr/include 和 /usr/lib 中,压缩包里提供的是64位的,如果需要32位的,请看下面win10 子系统Ubuntu(下面统称Ubuntu,不一样和真实Ubuntu环境一样,我没有实验过)的编译,注意这里Ubuntu子系统不能直接按照上面这样,但VMave里的Ubuntu可不可以我不知道,读者可以自行尝试,不行的话参照下面子系统因为编译需要多加一个 -fPIC参数,看后文。

  • 出现下面这样就说明已经,搭建 csapp.h 这个文件的环境成功

    在这里插入图片描述
    注意,这里用 gcc 编译时要加上 lcsapp64lpthread 因为是静态库,什么是静态库参照《CSAPP 3e》第7章第二节。
    csapp64 是你刚才移到库文件里的 libcsapp64.a,如果不喜欢这个名字可以改成 libcsapp.a(或者其它什么的,要保留前面的 lib),以后编译就可以直接指定 lcsapp 而不用加上64。

开始 win10 Ubuntu 20.04STL 子系统

  • 再次提醒。注意这里Ubuntu子系统不能直接按照上面这样,但VMave里的Ubuntu可不可以我不知道

  • 这次进入 code/src 目录,并用 make clean 把压缩包中预先编译好的 *.o 全部删除掉。因为它编译出来的不符合本系统要求。读者可以按照centos7试试有什么问题。
    在这里插入图片描述

  • vim 打开 Makefile 文件,添加一个下面的黄色参数
    在这里插入图片描述
    上面这个参数会在编译的时候加入到 gcc 中

  • 然后退出 vim ,输入

  • make cpe64.o csapp64.o fcyc64.o lsquare64.o clock64.o

  • 重新进行编译
    在这里插入图片描述

  • 接着输入 make ../lib/libcsapp64.a 链接产生一个libcsapp64.a 的静态库
    在这里插入图片描述

  • 在win10 ubuntu的lib目标不太一样,有一些我们需要改一下路径

    sudo cp include/csapp.h /usr/include/   这个照常不变
    
  • 进入到下面这个目录(你不一定是这个目录,可以用cd从/usr慢慢走到这个目录)
    在这里插入图片描述

  • 然后输入下面

    sudo cp /home/binwatson/code/lib/libcsapp64.a .
    

    在这里插入图片描述
    同样向上面输出 a.out就说明成功了。

编译32位的libcsapp.a 和 写一个shell脚步

  • 在 src 中的Makefile,提高了对32位的编译的支持,我们可以把上面make代码的后缀64,全部改成32的就可以编译32位的。
    在这里插入图片描述

  • 每次编译都需要 -lpthread 和 -lcsapp64 这个后缀参数,太麻烦了。下面写一个脚步方便,后面编译代码。

    #!/usr/bin/bash
    # 本脚步将 compiler 后接的第一个参的文件名,作为编译后的
    # 可执行文件名
    
    #PATH=/bin:/sbin:/usr/bin:/usr/sbin:/usr/local/bin:/usr/local/sbin:~/bin
    #export PATH
    
    CFLAGS="-O1 -Wall"
    ARG="-lcsapp64 -lpthread"
    
    
    filename=${1%.*}  # 截取出文件的名,去掉后缀 例如 fork.c --> fork
    allFile=""
    
    length=$#
    i=$#
    # echo ${i}
    while [ ${i} -gt 0 ]
    do
        i=$((${i}-1))
        # echo ${i}
        allFile=${allFile}" "${1}
        # echo $allFile
        shift
    done
    # echo ${filename}
    # echo ${allFile}
    # echo ${ARG}
    gcc ${CFLAGS} -o ${filename} ${allFile} ${ARG}
    
binwatson@LinZhenBin:~/code$ sh compiler.sh fork.c
binwatson@LinZhenBin:~/code$ ls
0         a.out  asm   compiler.h   conc    data  error  fork.c        include  io   link  netp  perf  vm
Makefile  arch   c.sh  compiler.sh  copy.c  ecf   fork   getasmfun.pl  intro    lib  mem   opt   src
binwatson@LinZhenBin:~/code$
  • 0
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值