Linux 静态库动态库 Makefile 制作
来源:互联网 发布:java enum interface 编辑:程序博客网 时间:2024/05/17 03:08
静态库:使用静态库制作工具:ar rcs libname.a a.o b.o c.o
优点:将函数库中的函数本地化。寻址方便,速度快。
缺点:每个使用静态库的进程都要将库编译到可执行文件中加载到内存。内存消耗严重
动态库:
1 生成“与位置无关”的目标文件gcc -fPIC a.c b.c c.c –c(参数 -fPIC 表示生成与位置无关代码)
2 使用gcc -shared选项:gcc -shared -o libname.so a.o b.o c.o
优点:多进程共享一份库文件,节省内存、易于更新
缺点:相较于静态库而言库函数访问略慢。
静态库
SrcFiles = $(wildcard ./src/*.c)
ObjFiles = $(patsubst %.c,%.o,$(SrcFiles))
path = -I./include
app1:libzjc.a
gcc main.c -o $@ $(path) -L ./ -l zjc
libzjc.a:$(ObjFiles)
ar -rcs $@ $(ObjFiles)
%.o:%.c
gcc -c $< $(path) -o $@
clean:
-@rm -f ./src/*.o
-@rm -f app1
动态库
SrcFiles = $(wildcard ./src/*.c)
ObjFiles = $(patsubst %.c,%.o,$(SrcFiles))
path = -I./include
app2:libzjc.so
gcc main.c -o $@ $(path) -L ./ -l zjc
libzjc.so:$(ObjFiles)
gcc -shared -o $@ $(ObjFiles)
%.o:%.c
gcc -c $< -fPIC $(path) -o $@
clean:
-@rm -f ./src/*.o
-@rm -f app2
-@rm -f libzjc.so
找不到动态库.so的问题
第一种:
使用环境变量 LD_LIBRARY_PATH
○ 动态库的绝对路径添加到该环境变量中
○ LD_LIBRARY_PATH = /usr/include/xxx:$LD_LIBRARY_PATH
○ export LD_LIBRARY_PATH
直接在shell中 - 临时设置
写入配置文件
□ ~/.bashrc - 用户级别
□ /etc/prefile - 系统级别
第二种:
给动态库设置软连接 /usr/kevin/fastdfs
○ 将软链接放到 /usr/lib /usr/lib64 /lib /lib64
○ sudo ln -s /usr/kevin/fastdfs/xxx.so /usr/lib/libxxx.so
第三种:
刷新 /etc/ld.so.cache
首先 vi /etc/ld.so.conf
将动态库的绝对路径写入该文件中
sudo ldconfig -v
- Linux 静态库动态库 Makefile 制作
- linux动态库及静态库的制作 和makefile 的简单编写
- linux下动态库和静态库的制作、寻找、比较及相关Makefile的编写
- linux动态库及静态库的制作和makefile的简单编写
- 通用的makefile,制作动态库和静态库
- Linux静态库与动态库制作
- linux静态库与动态库制作
- Linux 动态库与静态库制作
- linux静态动态库制作和使用
- linux 静态库,makefile
- makefile静态库 动态库
- linux编译动态库和静态库的makefile示例
- linux下静态库、动态库编译及makefile书写
- Linux Makefile 静态库动态库应用实例
- linux编译动态库和静态库的makefile示例
- Linux 动态和静态库(.so & .a)的Makefile模板
- linux静态库制作
- 静态、动态库制作使用
- 初学JAVA:连接MySql数据库
- Android——内存篇:清除当前app缓存
- 静态导入import static的作用
- Spring-data-JPA详细介绍,增删改查实现
- SVN分支/合并原理及最佳实践
- Linux 静态库动态库 Makefile 制作
- 关于父类的静态方法能否被子类重写的问题
- Spring —— web.xml 中用 PropertyPlaceholderConfigurer 类读取properties 文件 或 属性
- HTML5 新增标签
- 入门学习Linux常用必会60个命令实例详解 Linux必学的60个命令
- IBInspectable / IBDesignable的使用方法详解
- tomcat 请求中文乱码
- ubuntu14.04 rabbitmq重启丢失用户信息
- Spring Boot中@OneToMany与@ManyToOne几个需要注意的问题