gcc g++ rcc
大约 2 分钟
gcc g++ rcc
目录
gcc g++ rcc
gcc与g++
详见《深入理解计算机系统》
Linux编译器和反汇编器的使用
gcc和g++都可以编译C/C++,但教程上一般是gcc对C,gcc汇编,g++对C++,具体的这里不再深入
两者的用法几乎完全一致
linux指令(gcc 与objdump ) | 操作 | 生成文件 | 文件补充 |
---|---|---|---|
gcc -Og -S main.c | 仅编译 | 汇编文件main.s | 可以文本方式打开阅读汇编代码 |
gcc -Og -S -masm=intel main.c | 仅编译 | 汇编文件main.s | 还可以生成Intel格式的代码(没区别?) |
gcc -Og -c main.c | 编译+汇编 | 二进制文件main.o | sudo ./main.o 可运行该文件 |
gcc -Og -o prog main.c hello.c | 编译+汇编+链接 | 二进制文件prog | sudo ./prog 可运行该文件 |
gcc main.c | 编译+汇编+链接 | 二进制文件a.out | sudo ./a.out 可运行该文件 |
—————— | —————— | —————— | —————— |
g++ -S main.cpp | 仅编译 | 汇编文件main.s | 可以文本方式打开阅读汇编代码 |
g++ -c main.cpp | 编译+汇编 | 二进制文件main.o | sudo ./main.o 可运行该文件 |
g++ -o [world] main.cpp | 编译+汇编+链接 | 二进制文件main (或world ) | sudo ./prog 可运行该文件 |
g++ main.cpp | 编译+汇编+链接 | 二进制文件a.out | sudo ./a.out 可运行该文件 |
—————— | —————— | —————— | —————— |
objdump -d mstore.o | 反汇编二进制代码 | 不生成,在终端显示结果 | |
objdump -d prog | 反汇编二进制代码 | 不生成,在终端显示结果 |
表格补充:如进行链接,则必须要有一个main函数
反编译器(disassembler)补充:反汇编特性:
- 指令长度:x86-64的从1-15个字节不等,常用指令和操作数较少的指令所需的字节数少(反之)
- 设计指令格式的方式:从某个给定位置开始可以唯一性解码(如:只有pushq %rbx是以字节值53开头的)
- 指令名:反汇编使用的指令命名规则和GCC生成的有细微差别(如:末尾的q)
rcc
详见QT笔记
RCC 代表 反向 C 编译器(Reverse C Compiler)(不确定)
Qt 自带的开发工具集里有专门的 rcc 工具,用于将 *.qrc 里面描述的图片、文档等编译成对应的源代码文件 qrc_*.cpp 或者独立的二进制资源文件 *.rcc。下面介绍 rcc 工具的两种用途:
- (1)生成独立的二进制资源文件 *.rcc
- (2)应用程序内嵌资源