linux 下创建静态、动态库 1、LinuxLinux 下创建静态、动态库下创建静态、动态库__深水 蓝 深 水 蓝 Linux 下 创 建 静 态 、 Linux 下 创 建 静 态 、 源码-----------a.cpp---------------#includeinta(inti){std::printf(“ina(inta)%dn“,i);return0;}-----------b.cpp----------------#includeintb(char*s){std::coutusingnamespacestd;inta(inti);intb(char*s);intmain(){a(5); 2、b(“ok“);printf(“inmainn“);return0;}静态库 1、编译 生 成 a.ob.o 文 件 #g++-ca.cppb.cpp2 、 生 成 archive 文 件libtest.ac-创建r-将文件加入libtest.a#arrclibtest.aa.ob.o3、指定静态库 libtest.a 进行编译#g++-omainmain.cpplibtest.a运行结果#./a.outina(inta)5inintb(char*s):okinmain 对于 libtest.a 直接将里面的代码拷贝出来相当于静态编译动态库 1、编译生成 a.ob.o 文 3、件-fPIC 生成.o 文件时用相对地址实现代码位置无关#g++-fPICa.cppb.cpp2 、 生 成 动 态 库libtest.so#g++-shared-olibtest.soa.ob.o3 、 指 定 动 态 库 libtest.so 进 行 编 译 #g++main.cpp./libtest.so查看动态连接库#ldda.out./libtest.so=./libtest.so(0x40014000)libstdc++-libc6.2-2.so.3=/usr/lib/libstdc++-libc6.2-2.so.3(0x4002e000)libm.so.6= 4、/lib/i686/libm.so.6(0x40071000)libc.so.6=/lib/i686/libc.so.6(0x42000000)/lib/ld-linux.so.2=/lib/ld-linux.so.2(0x40000000)/lib/ld-linux.so.2=/lib/ld-linux.so.2(0x40000000) 其 他 1 、 动 态 连 接 库 3 时 假 如 #g++main.cpplibtest.so 编译可通过但运行出错在默认库路径下找不到 libtest.so 库#./a.out./a.out:errorwhileloading 5、sharedlibraries:libtest.so:cannotopensharedobjectfile:Nosuchfileordirectory查看连接库#ldda.outlibtest.so=notfoundlibstdc++-libc6.2-2.so.3=/usr/lib/libstdc++-libc6.2-2.so.3(0x4002c000)libm.so.6=/lib/i686/libm.so.6(0x4006f000)libc.so.6=/lib/i686/libc.so.6(0x42000000)/lib/ld-l 6、inux.so.2=/lib/ld-linux.so.2(0x40000000)2、便利使用可以将静态库 libtest.a 或者动态库 libtest.so 拷贝到默认库的查找路径里/lib 或者/usr/lib 里,编译时直接#g++main.cpp-ltest-l自 动 进 行 库 名 称 扩 展 #ldda.outlibtest.so=/usr/lib/libtest.so(...