首先创建文件。
main.c
extern void print1(void);
extern void print2(void);
int main(void)
{
print1();
print2();
return 0;
}
print1.c
#include
void print1(void)
{
printf("this is the first print\n");
}
print2.c
#include
void print2(void)
{
printf("this is the second print\n");
}
static library
1.分别对除mian.c文件之外的 .c 文件 执行
gcc -c print1.c
gcc -c print2.c
2.生成静态库
ar crs libpri.a print1.o print2.o (pri 应该是自定义的名称)
3.生成main.o
gcc -c main.c
4.生成可执行文件a.out
gcc main.o -L. -lpri (注意格式 -L后有个 . 表示当目录下,-l 后接不加扩展名的库名)
5.查看静态库中的文件
ar -t libpri.a
6.执行程序
./a.out
------------------------------------------------------------------------------------
dynamic library
1.分别对除mian.c文件之外的 .c 文件 执行
gcc -c print1.c -fPIC
gcc -c print2.c -fPIC
2.生成动态库
gcc -shared -o libpri.so print1.o print2.o
3.配置dynamic library的绝对path
(对于elf格式的可执行文件,是由ld-linux.so*来完成的,它先后搜索elf文件的 DT_RPATH 段—环境变量LD_LIBRARY_PATH—/etc/ld.so.cache文件列表—/lib/,/usr/lib目录下找到库文件后讲其载入内存。)
本次采用修改环境变量的方法
首先获取当前文件路径
pwd
查看当前环境变量
echo $LD_LIBRARY_PATH
复制当前路径添加到环境变量中
export LD_LIBRARY_PATH=/home/fs/jsxuexi/0410/IO/ar
查看现在的环境变量
echo $LD_LIBRARY_PATH
4.生成可执行文件a.out
gcc -c main.c -L. -lpri
(注意格式 -L后有个 . 表示当目录下,-l 后接不加扩展名的库名)
5.执行程序
./a.out