编译常用命令

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接: https://blog.csdn.net/weixin_43608153/article/details/95402480

linux平台的c代码编译,一般分四步:

1.预处理 gcc test.c -E -o test.i (头文件展开,宏替换,注释清除,条件变异处理等操作)
2. 编译 gcc test.i -S -o test.s (检查语法,生成汇编文件)
3. 汇编 gcc test.s -c -o test.o (生成电脑识别的二进制文件)
4. 链接 gcc test.o -o test (使用连接器ld链接一些列库文件从而生成平台可执行文件)

常用的编译命令:

  1. gcc 编译器 eg: gcc test.c -E -o test.i

  2. gdb 代码调试工具 可设置断点和监控参数来调试程序,很强大。 eg: gdb hello

  3. ld 链接器 通常编译的时候在后天通过 -L来链接, 优先级从左到右,查找方式为从右向左 eg: gcc -c test.c -0 test -Llib.a -Llib.b

  4. objcopy 目标文件拷贝,可用于源文件格式转换 eg: objcopy -O binary -S test.elf test.bin

  5. addr2line 将地址转化为固定文件名中的函数中的某行, 一般用于段死后找位置 eg: addr2line 0x632689215 -e test

  6. readelf 查看elf文件和.a .so库文件的信息,通过一些列参数可以到文件的信息 eg: readelf -a test

  7. ar 创建、修改库 eg:ar -rcs test.a test.o hello.o 生成test.a 静态库 ar test.a math.o

  8. objdump 反汇编文件查看器 可以查看二进制文件的相关信息,将二进制文件转化为汇编文件,从而能了解代码如何运行。 eg:objdump -S hello.o

  9. size 查看目标文件的各数据段信息 eg: size hello

  10. nm names 的简称,列出目标文件或可执行文件中的符号 eg: nm hello.o / nm hello

  11. strip 将可执行文件和库文件瘦身,去掉其符号,使其变小 eg: strip hello 瘦身前后, hello 文件大小由 8.2K 变为 6.1K

  12. gprof 可测试工程中各个函数的运行事件,通过指定-pg参数编译,

  13. as 汇编语言编译器,将汇编代码生成二进制 eg: as -l hello.s -o hello.o

  14. ldd 查看可执行文件依赖那些库 eg: ldd test

  15. strings 打印文件中的可打印的字符 eg: strings hello eg2: strings -f “*.so” | grep “xxxxxx”, 在库中查找

  16. c++ 编译c++ 代码, gcc -c++ hello.c -0 hello

  17. g++ 编译c++ 代码, g++ hello.cpp -0 hello.exe

  18. ranlib 更新库的有效符号表, 用ar命令更新库之后,需要对库中的._SYMDEF符号表进行更新,否则会报错。

猜你喜欢

转载自blog.csdn.net/weixin_43608153/article/details/95402480
今日推荐