一、用gcc生成静态库和动态库
1、准备工作
创建本次作业文档
mkdir test1
cd test1
编写c程序
first:hello.h
second:hello.c
three:main.c
2、.o文件生成
gcc -c hello.c
3、由.o文件创建静态库
ar -crv libmyhello.a hello.o
4、使用静态库
gcc -c main.c
gcc -o hello main.o libmyhello.a
5、由.o文件创建动态库
gcc -shared -fPIC -o libmyhello.so hello.o
6、使用动态库
gcc -o hello main.c -L. -lmyhello
二、静态库.a与.so库文件的生成与使用
1、创建作业文档
mkdir test2
cd test2
2、编写c程序
3、.a文件生成与使用
(1).a文件生成
ar crv libafile.a A1.o A2.o
(2)使用.a文件,创建可执行文件
gcc -o test test.c libafile.a
./test
4、.so库文件生成与使用
(1).o文件生成
gcc -c -fpic A1.c A2.c
(2).so文件生成
gcc -shared *.o -o libsofile.so
(3)使用.so文件,创建可执行文件
gcc -o test test.c libsofile.so
./test
出现错误:
运行ldd test:
发现确实是找不到对应的.so文件。
这是由于linux自身系统设定的相应的设置的原因,即其只在/lib and /usr/lib下搜索对应的.so文件,故需将对应so文件拷贝到对应路径。
sudo cp libsofile.so /uer/lib
./test
三、使用实例
在第一次作业的程序代码基础进行改编,除了x2x函数之外,再扩展写一个x2y函数(功能自定),main函数代码将调用x2x和x2y ;
将这3个函数分别写成单独的3个 .c文件,并用gcc分别编译为3个.o 目标文件;
gcc -c sub1.c sub2.c main1.c
将x2x、x2y目标文件用 ar工具生成1个 .a 静态库文件,
ar crv subfile.a sub1.o sub2.o
然后用 gcc将 main函数的目标文件与此静态库文件进行链接,生成最终的可执行程序,记录文件的大小。
gcc -o main1 main1.c subfile.a
将x2x、x2y目标文件用 ar工具生成1个 .so 动态库文件,然后用 gcc将 main函数的目标文件与此动态库文件进行链接,生成最终的可执行程序,记录文件的大小,并与之前做对比。
gcc -c -fpic sub1.c sub2.c
gcc -o main1 main1.c subsofile.so
./main1