Linux/C++系统编程 day2

linux编译调试

1.安装

  • $sudo apt install g++ gcc

    (一次性安装g++和gcc编译器)

2.过程

  • 编辑源码→预处理→编译→汇编→链接→可执行程序

  • 使用vim hello.c编辑源码

  • 使用file hello.o查看文件类型

  • 使用nm hello.o查看二进制文件

2.1预处理

  • $gcc -E hello.c -o hello.i
  • .i文件,处理以#开头的预编译指令

2.2编译

  • $gcc -S hello.c -o hello.s
  • .s文件,翻译成汇编代码文件

2.3汇编

  • $as hello.s -o hello.o
  • .o文件,二进制文件

2.4链接

  • $gcc hello.o -o hello
  • 可执行文件,绿色的标志

2.5直接编译执行

  • $gcc hello.c -o hello

    (使用./hello执行,以c为结尾的文件使用gcc编译)

  • $g++ hello.c

    (使用./a.out执行,以cc为结尾的文件使用g++编译)

  • 以cpp为结尾的文件gcc和g++都可以进行编译

2.6注释方法

法一
#if 0
此处输入代码
#endif

法二
//此处输入代码

法三
/*此处输入代码*/

3.静态库与动态库

  • $ldd main

    (查看main程序的依赖关系)

  • gcc -c add.c -o add.o

    (只编译不链接,形成.o文件)

3.1 .a静态库

静态库将会整合到程序中,在程序执行时不用加载静态库。

删除之后不能链接,但可以运行

  • $gcc -c add.c -o add.o

    (生成目标代码)

  • $ar crsv libadd.a add.o

    (归档打包成库文件)

  • $sudo cp libadd.a /usr/lib

    (放入系统库目录下)

  • $gcc main.c -o main -ladd

    (链接以add为名的库文件)

  • $./main

    (执行)

3.2 .so动态库

动态库只在执行时才被链接使用,不是直接编译为可执行文件,并且一个动态库可以被多个程序使用,故可称为共享库

删除之后不能运行,更新容易,执行程序大小较小

  • $gcc -c add.c -o add.o -fpic

    (生成与位置无关的目标代码)

  • $gcc -shared -o libadd.so add.o

    (归档打包成共享库文件)

  • $sudo cp libadd.so /usr/lib

    (放入系统库目录下)

  • $gcc main.c -o main -ladd

    (链接)

  • $./main

    (执行)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值