首页 > 系统服务 > 详细

linux环境下的链接库编译

时间:2020-02-17 22:40:39      阅读:73      评论:0      收藏:0      [点我收藏+]

 

 https://blog.csdn.net/shaosunrise/article/details/79968921

有4个文件,test1.c  包含了 print。h, test2.c 包含了sum。h

技术分享图片

 技术分享图片

 

 

 经过gcc -c  test1.c   test2.c 后,将2个源文件test1.c ,test2.c 编译成 .o 文件

技术分享图片

 

然后开始生成a库(注意:链接库前缀必须以lib开头),指令如下:ar rcs libtest.a test1.o test2.o

技术分享图片

 

 得到libtest.a库文件后,然后将.a库链接到主程序中,写主程序main.c和头文件main.h 。

技术分享图片

 

 加载a库,生成可执行文件并执行,指令如下:gcc main.c -L. -ltest -o testEXE

技术分享图片

 

 

生成动态库:

技术分享图片

 

 so库的前缀必须为lib,然后将.so库链接到主程序main.c中,这里需要注意一下,因为动态库的特性,编译器会到指定的目录去寻找动态库,目录的地址在/etc/ld.so.conf.d/ 目录里的libc.conf文件里

方法2 还可以将so库复制到默认的目录下。这里是将so库复制到了默认目录下,生成可执行文件并运行,指令如下:

 sudo cp libtest.so  /usr/lib/

gcc main.c -L. -ltest -o mainExe

这样就生成了可执行的mainExe可执行文件  。 可直接运行 ./mainExe   

 c主程序文件main.c 调用这些程序(test1.c test2.c)的函数接口是可以使用a库或so库。

在主程序中只需要include含有库中提供的函数(print(),sum() )接口声明的头文件即可

在加载动态链接库的时候,有可能会遇到加载不到的错误,原因在于系统默认加载的动态链接库路径里没有找到你的动态库,有三种解决方法:

1.在执行gcc main.c -L. -ltest -o main 前,执行 export LD_LIBRARY_PATH=$(pwd)

2.将你so所在的目录写到/etc/ld.so.conf文件里,然后执行ldconfig。

3.将你的so放在/etc/ld.so.conf里的路径位置里。

 

linux环境下的链接库编译

原文:https://www.cnblogs.com/xinping-study/p/12323907.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!