当前位置: 首页 > news >正文

CS:APP 第7章链接分步编译(cpp/cc1/as/ld)遇到的问题

环境

WSL Ubuntu 22.04.2 LTS
gcc (Ubuntu 11.3.0-1ubuntu1~22.04) 11.3.0

问题

问题一 cc1 命令找不到

cc1 命令在 /usr/lib/gcc/x86_64-linux-gnu/11/cc1 里,注意不同操作系统等可能 cc1 的位置不一样,可以使用 find 或者 locate 命令搜索。
通过下面命令,创建一个软链接可以全局暴露 cc1

sudo ln -s /usr/lib/gcc/x86_64-linux-gnu/11/cc1 /usr/bin/cc1

参考http://bbs.chinaunix.net/thread-696784-1-1.html

问题二 ld 命令链接 main.o swap.o 失败

我原来使用的命令忽略了书本里的提示 [ system object files and args ]

# 书中
ld -o p  [ system object files and args ] /tmp/main.o /tmp/swap.o
# 我实际用的命令
ld -o p /tmp/main.o /tmp/swap.o

使用 gcc命令链接 *.o 是没问题的,
即以下命令正确

gcc -o p /tmp/main.o /tmp/swap.o

于是通过gcc的 --verbose 参数

gcc --verbose -o p /tmp/main.o /tmp/swap.o

可以发现在gcc在链接的时候还链接了多个 system object files。
--verbose 显示出 gcc 用到的 system object files

于是更正后的链接指令为

ld -dynamic-linker /lib64/ld-linux-x86-64.so.2  \
/usr/lib/x86_64-linux-gnu/crt1.o  \
/usr/lib/x86_64-linux-gnu/crti.o  \/usr/lib/gcc/x86_64-linux-gnu/11/crtbeginS.o \
/usr/lib/gcc/x86_64-linux-gnu/11/crtendS.o \
hello.o -lc /usr/lib/x86_64-linux-gnu/crtn.o 
-o a.out

其他

gcc命令是 编译驱动程序(compiler driver)
会调用cppcc1asld等组成的 工具链(Toolchain)

http://www.lryc.cn/news/62530.html

相关文章:

  • Jsp+sql智能道路交通信息管理系统的设计与实现(论文+系统+开题报告+答辩PPT+外文翻译)
  • 自动化工具 WEB 自动化工具
  • AutoGPT 安装指南,使用避坑要点
  • 低调且强大——JNPF低代码平台
  • 《商用密码应用与安全性评估》第二章政策法规2.4商用密码应用安全性评估工作
  • MySQL 字段为 NULL 的5大坑,99%人踩过
  • 深入理解计算机系统--理解编译器编译的过程
  • 实现PXE批量网络装机及kickstrat无人值守安装(富士山终究留不住欲落的樱花)
  • 4.23日报
  • 【数据治理】数据治理方面的证书有哪些?
  • Let’s Make C++ Great Again——set与vector
  • Nginx+Tomcat负载均衡、动静分离
  • SpringCloud入门实战(七)-Hystrix服务熔断
  • 百度平地起“雷”,突然爆出的QPS数据意味着什么?
  • 电子模块|外控集成 LED 光源 WS2812模块---硬件介绍和stm32驱动
  • Jenkins+Python自动化测试持续集成详细教程(全网独家)
  • 运维监控工具PIGOSS BSM扩展指标介绍
  • 一些前端问题2
  • Moviepy模块之视频添加图片水印
  • day35—编程题
  • Linux安装Nginx
  • Qt 项目Mingw编译器转换为VS编译器时的错误及解决办法
  • 大学生用什么蓝牙耳机好?2023好用的蓝牙耳机推荐
  • 【好题】好题分享
  • three.js 怎么在自动缩放的时候添加动画效果
  • 考虑梯水电站群的水火电节能调度(Python代码实现)
  • CF914G Sum the Fibonacci
  • Shell基础入门实战
  • 如何进行微服务的技术选型?
  • Vue电商项目--应用开发详解