美文网首页iOS DeveloperAndroid知识程序员
编译、装载、链接和库的相关常用命令

编译、装载、链接和库的相关常用命令

作者: 科研者 | 来源:发表于2017-08-27 20:33 被阅读0次

由于现在开发软件基本上都是用的IDE(集成开发环境),所以很少接触到关于编译、链接、装载和库等方面的知识,这也导致了大家仅仅只会在上层开发代码,但对软件的编译、装载等工作原理一无所知,所以,当遇到一些编译、链接之类的错误底层错误时,都较难解决;
为了弄清编译、链接和程序运行的原理,我特意研究了相关知识;
本文是我当时在研究时用到的常用命令整理的,为了方便大家学习,现分享给大家,如下:

备注: Mac 中 可用clang 取代 gcc 命令

1. 预处理


$ gcc -E <代码文件> -o <输出文件>
或者
$ cpp <代码文件> -o <输出文件>

2. 编译


$ gcc -S <代码文件或者预处理后文件> -o <输出文件>
-fno-builtin:关闭内置函数;
-shared : 产生共享对象(动态链接库);
-fPIC : 指示gcc产生地址无关代码;
-fpic : 指示gcc产生地址无关代码;产生的代码相对“-fPIC”较小,但“-fpic”在某些平台上有一些限制;

3. 汇编


$ gcc -c <代码文件或者编译后文件> -o <输出文件>
或者
$ as <编译后文件> -o <输出文件>

$ gcc -c <代码文件或者编译后文件> -o <输出文件>

查看文件类型

$ file <文件名>

4. 查看可执行文件的内部结构


$ objdump -h <文件名>

-h :把关键段的基本信息打印出来;
-x : 把各段的更多的信息打印出来;
-s :将所有段的内容以16进制的方式打印出来;
-d :将所有包含指令的段把汇编;
-r :打印需要重定位的内容;

5. 查看可执行文件的代码段、数据段、BSS段的长度


$ size <文件名>

6. 查看可执行文件的符号表


$ nm <文件名>

7. 查看可执行文件的段


$ readelf <文件名>

8. 解析被编译器修饰后的名称


$ c++filt <修改后的名字>

9. 链接目标文件


$ id <目标文件1> <目标文件2> …… -e <入口函数名字> -o <输出文件名>

10. 链接命令


$ id [选项]
-verbose:查看默认的链接脚本;
-static : 静态链接;
-e <入口函数名>:设置程序的入口函数
-o <文件名>:设置输出文件名;
-s:禁止链接器产生符号表;

11. 静态库


$ ar <选项> <静态库>

-t:查看静态库的中目标文件;
-X: 将库中的所有目标文件解压出来;

相关文章

  • 编译、装载、链接和库的相关常用命令

    由于现在开发软件基本上都是用的IDE(集成开发环境),所以很少接触到关于编译、链接、装载和库等方面的知识,这也导致...

  • 程序员的自我修养

    程序员的自我修养:编译、链接、装载 问题 编译/链接的过程做了什么 目标/可执行文件的内容是什么 装载的过程做了什...

  • 【Note】Compiler

    一些编译相关知识,在此mark一下 预编译编译链接装载 词法分析: 扫描器 解析器:有限自动机构成 解析方式:表...

  • 操作系统 - 存储管理

    存储器工作原理 程序链接 链接库 静态链接 程序装载到内存和运行前链接 动态链接 内存一边装载程序一边链接,生成可...

  • undefined reference出现的情况

    1 常见 链接时缺失了相关目标文件 需要在源码中增加实现 链接时缺少相关的库文件 需要在编译时补全该库 2 其他情...

  • 使用readelf和objdump解析目标文件

    引言 本文是对程序员的自我修养:链接、装载与库中第3章的实践总结(和结构相关的示意图都是用Gliffy Diagr...

  • 【Linux】编译,链接,装载简单梳理

    简单梳理为了更快的记忆理解及传达 一.编译 1.1 编译过程: 编译产出文件: 1.2 ELF文件类型: linu...

  • 常用的gcc选项

    调试相关 警告相关 改变隐藏的链接行为 链接静态库 or 链接动态库 so相关选项 exe相关选项

  • scons

    第一章:编译和安装SCons第二章:简单编译第三章:编译相关的一些事情第四章:编译和链接库文件第五章:节点对象第六...

  • chap 7

    1. 静态链接;加载时共享库的动态链接;运行时共享库的动态链接。 2. 预编译 编译 汇编 链接 加载...

网友评论

    本文标题:编译、装载、链接和库的相关常用命令

    本文链接:https://www.haomeiwen.com/subject/zqeidxtx.html