静态库
编译的时候把库中的代码加到目标程序中。
find / -name *.a
ar -t 静态库的名字 ----》查看静态库的组成部分
步骤:
1、确定函数接口 函数名、参数、功能、返回值
2、由于库都是有.o文件组成的,需要生成.o文件
gcc -c add.c -o add.o
gcc -c sub.c -o sub.o
3、制作静态库
ar crs libmymath.a add.o sub.o
静态库以lib为前缀,中间是库的名称,以.a为后缀
c 创建
r 插入
s 索引
4、把编译好的静态库中的代码添加到目标程序中
gcc main.c -o main -L . -lmymath
其中-L指定库的路径,如何找到库 .表示当前目录
-l表示库的名称,也就是要使用的库是哪个? mymath
动态库(共享库)
运行的时候把库中的代码加到目标程序中
步骤:
1、确定函数接口 函数名、参数、功能、返回值
2、由于库都是有.o文件组成的,需要生成.o文件
gcc -fPIC -c add.c -o add.o
gcc -fPIC -c sub.c -o sub.o
-fPIC 指定位置无关的代码,可以让操作系统把共享库加载到内存中任意位置
3、制作动态库
gcc -shared -o libmysec.so add.o sub.o
动态库以lib为前缀,中间是库的名称,以.so为后缀
-shared 共享
4、运行时把编译好的共享库中的符号添加到目标程序中
gcc main.c -o main -L . -lmysec
其中-L指定库的路径,如何找到库 . 表示当前目录
-l表示库的名称,也就是要使用的库是哪个? mysec
三种执行方式:(选择其中一种方式即可)
1、 /lib 或者 /usr/lib
sudo cp libmysec.so /usr/lib
2、修改环境变量 LD_LIBRARY_PATH
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/home/linux/16091/p/dynamic
如何删除环境变量中的内容:
export LD_LIBRARY_PATH=
3、添加配置文件(以绝对路径的方式添加)
sudo vi /etc/ld.so.conf.d/filename.conf
sudo ldconfig
(1)共享库创建
(2)链接共享库
编译的时候把库中的代码加到目标程序中。
find / -name *.a
ar -t 静态库的名字 ----》查看静态库的组成部分
步骤:
1、确定函数接口 函数名、参数、功能、返回值
2、由于库都是有.o文件组成的,需要生成.o文件
gcc -c add.c -o add.o
gcc -c sub.c -o sub.o
3、制作静态库
ar crs libmymath.a add.o sub.o
静态库以lib为前缀,中间是库的名称,以.a为后缀
c 创建
r 插入
s 索引
4、把编译好的静态库中的代码添加到目标程序中
gcc main.c -o main -L . -lmymath
其中-L指定库的路径,如何找到库 .表示当前目录
-l表示库的名称,也就是要使用的库是哪个? mymath
动态库(共享库)
运行的时候把库中的代码加到目标程序中
步骤:
1、确定函数接口 函数名、参数、功能、返回值
2、由于库都是有.o文件组成的,需要生成.o文件
gcc -fPIC -c add.c -o add.o
gcc -fPIC -c sub.c -o sub.o
-fPIC 指定位置无关的代码,可以让操作系统把共享库加载到内存中任意位置
3、制作动态库
gcc -shared -o libmysec.so add.o sub.o
动态库以lib为前缀,中间是库的名称,以.so为后缀
-shared 共享
4、运行时把编译好的共享库中的符号添加到目标程序中
gcc main.c -o main -L . -lmysec
其中-L指定库的路径,如何找到库 . 表示当前目录
-l表示库的名称,也就是要使用的库是哪个? mysec
三种执行方式:(选择其中一种方式即可)
1、 /lib 或者 /usr/lib
sudo cp libmysec.so /usr/lib
2、修改环境变量 LD_LIBRARY_PATH
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/home/linux/16091/p/dynamic
如何删除环境变量中的内容:
export LD_LIBRARY_PATH=
3、添加配置文件(以绝对路径的方式添加)
sudo vi /etc/ld.so.conf.d/filename.conf
sudo ldconfig
(1)共享库创建
(2)链接共享库
(3)加载共享库