linux环境下的链接库编译
2020-02-17 21:53 xplorerthik 阅读(272) 评论(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里的路径位置里。