编译分类

本文介绍了静态编译和动态编译的概念与区别,包括如何制作静态库和动态库。重点讲解了在Linux环境下如何使用编译命令指定库文件路径和头文件路径,并详细阐述了动态链接库的使用方法,包括在不同路径下的编译与运行策略。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

选择性编译:

也就是我们常用的ifdefine防止头文件多次重复编译

#ifdef AAA
#else
#endif

动态编译:

动态编译是使用的动态库文件进行编译

gcc hello.c -o hello(一步到位)

默认使用的是动态编译的方法

静态编译:

静态编译使用的静态库文件进行编译

gcc -static hello.c -o hello

静态编译和动态编译的区别:

1.使用的库文件的格式不同

动态编译:使用动态库

静态编译:使用静态库

制作静态库

gcc -c mylib.c -o -mylib.o //.o是汇编产生的二进制文件,也是可执行文件的上一步

ar rc libtestlib.a mylib.o
//注意静态库起名是必须以lib开头,以.a结尾

 

编译程序

方法1:

gcc -static mytest.c(主调函数) libtesrlib.o(静态库) -o mytest

方法2:可以指定头文件以及库文件路径

例如:libtest.a mylib.h 移动到/home/teacher

mv libtestlib.a mylib.h /home/teacher

程序命令

 gcc -static mytest.c -o mytest -L/home/teacher -ltestlib -I/home/teacher

-L:指定库文件路径

-l(小写L):指定找那个库文件,指定的库文件只要lib后,.a前面的部分

-I(大写i) :指定头文件的路径

方法3:将库文件及头文件放到系统默认指定的路径下

库文件默认的路径是: /lib或/usr/lib

头文件的默认路径是:/usr/include

sudo mv libtestlib.a /usr/lib

sudo mv mylib.h  /usr/include

编译命令:gcc -static mytest.c -o mytest -ltestilb

制作动态库连接库

gcc -shared mylib.c -o libtestlib.so  //lib和.so是固定中间名自己起

//使用gcc编译制作动态链接库

动态连接库的使用方法

方法1:库函数,头文件均在当前目录下

gcc mytest.c libtestib.so -o mytest

方法2:库函数头文件假设在/opt目录下

gcc mytest.c -o mytest -L/home/teacher -ltestlib -I/home/teacher

编译通过,运行时出错,编译时找到了库函数,但连接时找不到库

执行以下操作:

export LD_LIBRARY_PATH=/:$LD_LIBRARY_PATH

./是当前目录下

路径和路径用:分割

#./mytest 可找到动态链接库

方法3:库函数,头文件均在系统路径下

cp libtestlib.so /usr/lib

cp mylib.h /usr/include

gcc mytest.c -o mytest -ltestlib

#./mytest

注:当静态和动态库重名时,默认优先动态库。或者加入-static指定静态库 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值