20170725Linux下Makefile之三_动态链接库与静态链接库
来源:互联网 发布:linux 文件系统初始化 编辑:程序博客网 时间:2024/06/15 13:14
Linux下Makefile之三_动态链接库与静态链接库
1.基础介绍
动态链接库:lib*.so,区别与Windows中的*.dll,边执行边调用函数,依赖于外部库函数,函数修改不影响动态函数库的升级。
静态链接库:lib*.a,提前进行了函数库编译,包含了所有静态函数库的编译,编译后的执行程序不需要依赖于外部函数库,但是一旦函数库有些许改动就要重新编译。
2.文件prog.c 、code.c、code.h
prog.c
#include <stdio.h>
#include "code.h"
int main(void)
{
int i = 1;
printf ("myfun(i) = %d\n", myfun(i));
}
code.c
#include "code.h"
int myfun(int in)
{
return in + 1;
}
code.h
extern int myfun(int);
3、生成和调用动态链接库libcode.so
3.1生成攻台链接库libcode.so,编写makefile文件
CC:=gcc
LIBS:=
OBJS:=prog.o code.o
LDFLAGS:=
DEFINES:=
INCLUDE:=-I
CFLAGS:=
CXXFLAGS:=
#link parameter
LIB :=liscode.so
#link
${LIB}:code.o
${CC} -shared -o -fPIC -o $@ $^
#compile
code.o:code.c
${CC} -c -fPIC $^ -o $@
#clean
clean:
rm -f test ${OBJS} ${LIB}
3.2调用动态链接库libcode.so
Makefile有三个非常有用的变量。分别是$@,$^,$<代表的意义分别是:
$@--目标文件,$^--所有的依赖文件,$<--第一个依赖文件。
使用动态链接库,Makefile文件如下:
prog:
gcc prog.c -I. -L. -o prog -lcode
clean:
rm -f test ${OBJS} ${LIB}
这里不分是动态的还是静态的,但是,如果使用动态链接库,运行时需要将libcode.so文件拷贝到/usr/lib下,静态库则不需要。
运行程序如果提示找不到xxx.so,敲以下命令即可:
export LD_LIBRARY_PATH=.:$LD_LIBRARY_PATH // 把当前目录加入到库文件搜索目录环境变量,当时的错误提示如下:
4.生成和调用静态链接库
4.1生成静态链接库libcode.a
#######################
#静态链接库生成的 Makefile
# #######################
#
# # compile and lib parameter
CC := gcc
LIBS :=
OBJS :=prog.o code.o
LDFLAGS :=
DEFINES :=
INCLUDE := -I.
CFLAGS :=
CXXFLAGS:=
#
# # link parameter
AR := ar
LIB := code.a
#
# #link
$(LIB):code.o
$(AR) -r $@ $^
# #compile
code.o:code.c
$(CC) -c $^ -o $@
clean:
rm -f test ${OBJS}
4.2调用静态链接库libcode.a
使用静态链接库,Makefile文件如下:
prog:
gcc prog.c -I. -L. -o prog -lcode
clean:
rm -f test ${OBJS} ${LIB}
这里不分是动态的还是静态的,但是,如果使用动态链接库,运行时需要将libcode.so文件拷贝到/usr/lib下,静态库则不需要。
- 20170725Linux下Makefile之三_动态链接库与静态链接库
- Linux下Makefile中动态链接库和静态链接库的生成与调用
- Linux下动态链接库与静态链接库比较
- Linux 静态链接库与动态链接库之二:动态链接库生成及使用
- Linux 静态链接库与动态链接库之二:动态链接库生成
- Linux 静态链接库与动态链接库之二:动态链接库生成
- linux C编程入门之静态链接库、动态链接库的编译与链接
- LINUX 下动态,静态链接库实战
- linux下静态链接库和动态链接库
- linux下的静态链接库和动态链接库
- Linux下的动态链接库和静态链接库
- Linux下的动态链接库和静态链接库
- Linux下动态链接库和静态链接库
- 分析Linux下静态链接库和动态链接…
- Windows系统和Linux系统中的静态链接库与动态链接库(三)
- Windows系统和Linux系统中的静态链接库与动态链接库(三)
- 静态链接库与动态链接库(下)
- VC下静态链接库与动态链接库
- u3d
- Linux I/O重定向
- BZOJ 1069-最大土地面积(旋转卡壳)
- 如何在Mac上新建Jenkins agent节点进行iOS打包(一)
- hello world!
- 20170725Linux下Makefile之三_动态链接库与静态链接库
- Theme属性详解
- Lock与synchronized 的区别
- 百度2017春招笔试真题编程题集合--不等式数列
- Java多态入门讲解(深入浅出)
- Picasso,Glide,Fresco比较
- Blockchain的鱼和熊掌系列(19) 之 pthread 线程库
- ActiveMQ深入浅出(五)——ActiveMQ将消息持久化到数据库
- 定时任务