gcc 动态库的编译和使用
1.制作出来的库,如何给用户使用?
头文件 *.h
制作出来的库 *.so
2.动态库的命名规则(三部分)
lib + 自定义库的名字 + .so
3.制作动态库的步骤
1 将.c文件生成.o[语法] gcc .c文件(原材料) -c -fpic(fPIC)gcc *.c [-I ./include] [-c] [-fpic(fPIC)]
2 使用gcc -shared,将.o文件打包,生成libXXX.sogcc [-shared *.o] [-o libXXX.so]
4.动态库的使用
生成可执行文件
gcc main.c -I ./include/ -L ./lib/ -lmycalc -o app -L 指定静态库的路径-lXXX XXX指定静态库的名字
5. 为什么程序编译完成了之后,运行时确找不到so库呢
使用ldd命令查看,运行时所需要链接的so库
6. 如果找不到就需要配置so库路径
1)export LD_LIBRARY_PATH=自定义动态库的路径
(只能起到临时作用,关闭终端后失效)
LD_LIBRARY_PATH : 指定查找共享库(动态链接库)时除了默认路径之外的其他路径,该路径在默认路径之前查找
2)将上述命令写入home目录下的.bashrc文件中,保存后重启终端生效(永久)
3)直接将动态库拷贝到user/lib的系统目录下(强烈不推荐!!)
4)将libmy.so所在绝对路径追加入到/etc/ld.so.conf文件,使用sudo ldconfig -v 更新
7、实测
1、gcc -fPIC -c *.c -I ../include2、gcc -shared *.o -o libMyCalc.so -I ../include3、mv libMyCalc.so ../lib4、gcc main.c -o app -L lib -l MyCalc -I include5、ldd app6、export LD_LIBRARY_PATH=./lib
gcc 动态库的编译和使用相关推荐
- Linux上静态库和动态库的编译和使用
linux上静态库和动态库的编译和使用(附外部符号错误浅谈) 这就是静态库和动态库的显著区别,静态库是编译期间由链接器通过include目录找到并链接到到可执行文件中,而动态库则是运行期间动态调用,只 ...
- Linux下静态库和动态库的编译连接
http://blog.sina.com.cn/s/blog_4090ba590100t3nu.html .a文件 gcc -c test.c ar rc libtest.a test.o ran ...
- go语言动态库的编译和使用
本文主要介绍go语言动态库的编译和使用方法,以linux平台为例,windows平台步骤一样,具体环境如下: $ echo $GOPATH /media/sf_share/git/go_practic ...
- C语言 gcc 动态库
动态库编译例子 代码准备 |-- fn | |-- add.c | `-- sub.c |-- h | `-- head.h |-- lib `-- test.c add.c内容 int add(in ...
- Linux 动态库的编译和使用
1. 动态链接库简介 动态库又叫动态链接库,是程序运行的时候加载的库,当动态链接库正确安装后,所有的程序都可以使用动态库来运行程序.动态库是目标文件的集合,目标文件在动态库中的组织方式是按特殊的方式组 ...
- gcc动态库fPIC和fpic编译选项差异介绍
作者以前并没有特别留意fPIC和fpic之间的差别,最近在aarch64服务器上编译遇到的一个问题,让自己好好的查询了一些资料,或许平常的开发人员并不容易遇到它,但愿对有缘的读者有一定帮助. 1)出动 ...
- 多层动态库的编译及使用
编程之路刚刚开始,错误难免,希望大家能够指出. 假如生成一个动态库A,然后动态库B的生成又调用了动态库A,那么凡是调用了动态库B的程序或者库,需要既链接动态库A也要链接动态库B,这也是动态库最重要的特 ...
- c 调用java的dll_Windows下java调用c的dll动态库--Dev_Cpp编译c生成dll
1.eclipse下建立一个HelloJNI.java内容如下: package JNI; public class HelloJNI { static { System.out.println(&q ...
- java 使用c .dll_Windows下java调用c的dll动态库--Dev_Cpp编译c生成dll
1.eclipse下建立一个HelloJNI.java内容如下: package JNI; public class HelloJNI { static { System.out.println(&q ...
最新文章
- KDD2020接受论文列表已公开!338篇优秀论文汇总!
- jquery 验证控件
- CentOS 7 + Hadoop3 伪分布式集群配置
- c++中的变量作用范围
- java课程设计 成绩_Java课程设计—学生成绩管理系统(201521123004-林艺如)
- 2017/5 JavaScript基础9 --- 闭包、作用域
- 在ubuntu下各种格式软件安装及常用命令
- IDEA的debug方法头坑
- GDB调试精粹及使用实例
- Linux 实现与宿主机共享文件夹 Centos7
- 《3D数学基础:图形与游戏开发 》
- 学校多媒体讲台计算机怎么开,学校教室多媒体使用说明.PPT
- GIS软件——ArcGIS去除影像黑边
- 三行代码实现`年月日`的弹出控件
- 阿里云大幅降低CDN价格网宿蓝汛跟不跟?
- JAVA idea建包的时候com.不分开
- Flutter 银行卡隐藏号码,只显示后四位。
- ~ 如何用C++自制一个日麻游戏 ~ 概述
- 基于Springboot+Mybatisplus+Vue的科研项目管理系统
- [全流程案例]壮汉:3.头部雕刻(ZBrush)