Linux生成动态库.so与生成静态库.a

    xiaoxiao2023-03-24  4

    动态库共享库

    第一步:通过gcc -fPIC -c 编译生成.o文件

    gcc -fPIC -c a.c   (编译生成.o文件 -fPIC与位置无关)

    gcc -fPIC -c b.c

    生成a.o,b.o编译文件。

    第二步:通过上面已经生成的a.o,b.o文件生成.so文件 方法1: gcc -shared -Wl -o liba.so a.o 方法2: gcc -shared -Wl,-soname,libab.so.1 -o libab.so.1.10 a.o b.o 第三步:通过依赖库编译生成可执行文件 main.c 引用已经生成的.so文件 libmyab.so.1.10 编译方法:gcc main.c libmyab.so.1.10 -o app 编译生成 app  运行 $ ./app 出错:error while loading shared libraries: libcalc.so.1: cannot open shared object file: No such file or directory ldd察看依赖库: $ ldd app linux-gate.so.1 =>  (0xb77c8000) libcalc.so.1 => not found    <============注意 libc.so.6 => /lib/i386-linux-gnu/libc.so.6 (0xb760c000) /lib/ld-linux.so.2 (0xb77c9000) 注意点libcalc.so.1 => not found动态库没有找到 解决方法:把动态库路径添加到配置文件中:$ sudo vi /etc/ld.so.conf 更新动态库:$ sudo ldconfig -v 重新运行./app成功 生成so name : -Wl,-soname,libxxx.so.1 生成link name : ln -s libxxx.so.1.10 xxx.so 静态库 gcc -c -fPIC *.c ar rcs libxx.a *.o nm :察看文件包含内容 $ nm libcalc.a  add.o: 00000000 T add dive.o: 00000000 T dive mul.o: 00000000 T mul sub.o: 00000000 T sub 编译: $ gcc main.c lib/libcalc.a -o app 静态库和共享库的区别: 静态库优点:app随便放哪都可以运行 缺点:lib合入app导致app体积变大
    转载请注明原文地址: https://ju.6miu.com/read-1202854.html
    最新回复(0)