Linux中静态库和动态库的制作及发布

1、通过gcc生成可执行文件的另一种方法:

(1)gcc  hello.c  -I./include/ (一步到位生成a.out可执行文件)

头文件在当前路径下没有,这时用-I指定一个包含所需头文件的路径(/include/),这样的话我们就可以直接使用所需的头文件了。

(2)./a.out (执行a.out)

2、指定生成的可执行文件的名字为A:

gcc  hello.c  -I./include/  -o  A

然后执行./A命令同样可以输出结果。

3、gcc编译参数

                       -I(大写的i):包含头文件路径(可以是绝对路径,也可以是相对路径)

                      -O:(后面紧跟1或2或3,优化选项),数值越大优先级越高。

                      -L:包含的库路径

                      -l(小写的L):后面跟库名(指定库名)。如要指定libxxx.so这个库,用法:-lxxx(掐头去尾,把lib和.so去掉)

                      -c:编译生成.o文件

                      -o:生成目标文件

                      -g:用于gdb调试,不加此项不能进行gdb调试。

                      -Wall:显示更多的警告(W警告all显示更多的警告)

                      -E 输出到标准输出,宏替换,头文件展开

                      -S 编译成汇编语言

                      -D:指定宏定义

                      -lstdc++:编译c++代码

4、编译.cpp文件生成可执行文件有两种方法:

方法一:

方法二:

5、静态库(以.a结尾)

静态库的制作步骤:

(1)利用gcc将.c文件编译为.o文件

(2)将.o文件打包(ar    rcs    libxxx.a(要制作的库的名字)   x.o   xxx.o(.o文件,可以有多个))

(3)将头文件和库一起发布

静态库的使用:编译时需要加静态库的名字(记得路径),-I(大写的i)包含头文件。

静态库的优点:执行速度快;发布应用时不需要发布库。

静态库的缺点:库变化更时需要重新编译应用;执行程序体积会较大。

静态库的文件命名:libxxx.a 其对应windows中的lib文件。

(1)生成.o文件,再生成libxxx.a文件。(我这里的xxx是hello)

可以用nm命令查看库文件内容:

例子:

6、动态库(以.so结尾)

动态库的制作步骤:

(1)编译与位置无关的代码,生成.o文件。要用到参数-fPIC(与位置无关)

(2)将.o文件打包(-shared,-o指定库名,后面加上原材料xxx.o)

(3)将头文件和库一起发布

动态库的使用:

(1)指定动态库的路径(所需参数比如:L等,和静态库差不多)

(2)执行的时候不能找到动态库的解决办法:

  1. 拷贝到系统的库路径下(不推荐)
  2. 修改LD_LIBRARY_PATH环境变量,将库所在的路径添加到环境变量中,用冒号分割。
  3. 修改sudo vi  /etc/ld.so.conf,添加库路径在文件中,sudo  ldconfig  -v (加-v是动态显示加载过程,不加也行)

动态库的优点:执行程序体积小;库变更时一般不需要重新编译应用。

动态库的缺点:执行时需要加载动态库,相对而言,比静态库慢;发布应用时,需要同时发布动态库。

发布动态库:

另一种方法:

第三种方法:

sudo  vi  /etc/ld.so.conf(在这里面添加路径,如:/home/zyy/lib)

sudo  ldconfig  -v (加-v是动态显示加载过程,不加也行)

然后输入echo $LD_LIBRARY_PATH会显示用户在/etc/ld.so.conf中添加的路径。

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值