gcc编译流程

  • PC 机上的编译工具链为 gcc、ld、objcopy、objdump 等,它们编译出来的
    程序在 x86 平台上运行。要编译出能在 ARM 平台上运行的程序,必须使用交叉编
    译工具 xxx-gcc、xxx-ld 等。

1. c/c++编译过程

步骤:预处理(preprocesing)->编译(compilation)->汇编(assembly)->链接(linking)

预处理:预处理功能主要包括宏定义,文件包含,条件编译,去注释等   .i。

编译:在这个阶段中,gcc 首先要检查代码的规范性、是否有语法错误等,以确定代码的实际要做的工作,
在检查无误后,gcc 把代码翻译成汇编语言 .s

汇编:汇编阶段是把编译阶段生成的“.s”文件转成目标文件 .o

链接:生成可执行文件或库文件 test

在这里插入图片描述

gcc -E -o hello.i hello.c (ccl)
gcc -S -o hello.s hello.i
-------------------------
gcc -c -o hello.o hello.s (as)
-------------------------
gcc -o hello hello.o 其他.o

1.1 常用编译选项

在这里插入图片描述

1.2 编译多个文件(两个方法)

gcc -c -o test 1.c 2.c

gcc -c -o 1.o 1.c
gcc -c -o 2.o 2.c
gcc -o test 1.o 2.o

1.3 制作、使用动态库

制作:
gcc -c -o main.o main.c
gcc -c -o sub.o sub.c
gcc -shared -o libsub.so sub.o sub2.o sub3.o
gcc -o test main.o -lsub -L /libsub.so/所在目录/

运行:需要把动态库放到板子上
先把 libsub.so 放到 Ubuntu 的/lib 目录,然后就可以运行 test 程序
或者把当前动态库文件的路径加入环境变量:
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/a

1.4 使用静态库

gcc -c -o main.o main.c
gcc -c -o sub.o sub.c
ar crs libsub.a sub.o sub2.o sub3.o(可以使用多个.o 生成静态库)
gcc -o test main.o libsub.a (如果.a 不在当前目录下,需要指定它的绝对或相对路径)
(gcc -o test main.o /path/libsub.a
gcc -o test main.o -L /path -lsub)

运行:不需要把静态库 libsub.a 放到板子上。
注意:执行 arm-buildroot-linux-gnueabihf-gcc -c -o sub.o sub.c 交叉编译需要在最后面加上-fPIC 参数
静态库和动态库区别

hf-gcc -c -o sub.o sub.c 交叉编译需要在最后面加上-fPIC 参数

静态库和动态库区别

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值