linux x86下依赖于动态链接库so的cpp程序编译
2013-04-25 18:16
741 查看
1.编译test.cpp:依赖的动态链接库和test.cpp同一目录,名称为:libxmnetsdk.so,编译命令如下:
g++ test.cpp -L. -lxmnetsdk -o test
2.查看编译好的执行文件依赖的库:
root@ubuntu:/studio/frameForward# ldd test
linux-gate.so.1 => (0x00a8c000)
libxmnetsdk.so => not found
libstdc++.so.6 => /usr/lib/i386-linux-gnu/libstdc++.so.6 (0x00994000)
libm.so.6 => /lib/i386-linux-gnu/libm.so.6 (0x003eb000)
libgcc_s.so.1 => /lib/i386-linux-gnu/libgcc_s.so.1 (0x005cc000)
libc.so.6 => /lib/i386-linux-gnu/libc.so.6 (0x00b30000)
/lib/ld-linux.so.2 (0x005fb000)
发现libxmnetsdk.so无法找到,需要设置so路径;
3.设置动态库路径:
(1)可以将依赖的so拷贝到/lib或者/usr/lib下
(2)安装在其他目录,需要将其添加到/etc/ld.so.cache文件中,步骤如下
编辑/etc/ld.so.conf文件,加入库文件所在目录的路径
运行ldconfig,该命令会重建/etc/ld.so.cache文件
(3)(临时指定)
#export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/libpath
4.再次运行ldd,发现库已能找到:
root@ubuntu:/studio/frameForward# ldd test
linux-gate.so.1 => (0x00f47000)
libxmnetsdk.so => /usr/lib/libxmnetsdk.so (0x004a4000)
libstdc++.so.6 => /usr/lib/i386-linux-gnu/libstdc++.so.6 (0x00cf1000)
libm.so.6 => /lib/i386-linux-gnu/libm.so.6 (0x00f5c000)
libgcc_s.so.1 => /lib/i386-linux-gnu/libgcc_s.so.1 (0x00110000)
libc.so.6 => /lib/i386-linux-gnu/libc.so.6 (0x0012c000)
libpthread.so.0 => /lib/i386-linux-gnu/libpthread.so.0 (0x00294000)
/lib/ld-linux.so.2 (0x00775000)
5.运行./test,程序已能正常工作
BTW:库文件在连接(静态库和共享库)和运行(仅限于使用共享库的程序)时被使用,其搜索路径是在系统中进行设置的。
一般Linux系统把 /lib和 /usr/lib两个目录作为默认的库搜索路径,所以使用这两个目录中的库时不需要进行设置搜索路径即可直接使用。
对于处于默认库搜索路径之外的库,需要将库的位置添加到库的搜索路径之中。
g++ test.cpp -L. -lxmnetsdk -o test
2.查看编译好的执行文件依赖的库:
root@ubuntu:/studio/frameForward# ldd test
linux-gate.so.1 => (0x00a8c000)
libxmnetsdk.so => not found
libstdc++.so.6 => /usr/lib/i386-linux-gnu/libstdc++.so.6 (0x00994000)
libm.so.6 => /lib/i386-linux-gnu/libm.so.6 (0x003eb000)
libgcc_s.so.1 => /lib/i386-linux-gnu/libgcc_s.so.1 (0x005cc000)
libc.so.6 => /lib/i386-linux-gnu/libc.so.6 (0x00b30000)
/lib/ld-linux.so.2 (0x005fb000)
发现libxmnetsdk.so无法找到,需要设置so路径;
3.设置动态库路径:
(1)可以将依赖的so拷贝到/lib或者/usr/lib下
(2)安装在其他目录,需要将其添加到/etc/ld.so.cache文件中,步骤如下
编辑/etc/ld.so.conf文件,加入库文件所在目录的路径
运行ldconfig,该命令会重建/etc/ld.so.cache文件
(3)(临时指定)
#export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/libpath
4.再次运行ldd,发现库已能找到:
root@ubuntu:/studio/frameForward# ldd test
linux-gate.so.1 => (0x00f47000)
libxmnetsdk.so => /usr/lib/libxmnetsdk.so (0x004a4000)
libstdc++.so.6 => /usr/lib/i386-linux-gnu/libstdc++.so.6 (0x00cf1000)
libm.so.6 => /lib/i386-linux-gnu/libm.so.6 (0x00f5c000)
libgcc_s.so.1 => /lib/i386-linux-gnu/libgcc_s.so.1 (0x00110000)
libc.so.6 => /lib/i386-linux-gnu/libc.so.6 (0x0012c000)
libpthread.so.0 => /lib/i386-linux-gnu/libpthread.so.0 (0x00294000)
/lib/ld-linux.so.2 (0x00775000)
5.运行./test,程序已能正常工作
BTW:库文件在连接(静态库和共享库)和运行(仅限于使用共享库的程序)时被使用,其搜索路径是在系统中进行设置的。
一般Linux系统把 /lib和 /usr/lib两个目录作为默认的库搜索路径,所以使用这两个目录中的库时不需要进行设置搜索路径即可直接使用。
对于处于默认库搜索路径之外的库,需要将库的位置添加到库的搜索路径之中。
相关文章推荐
- 收藏一个实用技巧:linux下查看动态链接库so文件的依赖的相关组建发布时间
- linux下查看动态链接库so文件的依赖的相关组建
- linux下查看动态链接库so文件的依赖的相关组建
- linux下查看动态链接库so文件的依赖的相关组件
- linux下查看动态链接库so文件的依赖的相关组建
- linux下查看动态链接库so文件的依赖的相关组建
- linux下查看动态链接库so文件的依赖的相关组建
- linux下查看动态链接库so文件的依赖的相关组建
- linux下查看动态链接库so文件的依赖的相关组建
- [LinuxC]加载动态链接库so程序简单实例
- linux 下QT 程序编译链接两个错误
- Linux程序运行时找不到动态链接库的原因
- linux命令之查看程序动态库依赖-ldd
- Linux中c程序的编译链接过程2017/12/10
- 程序的链接和装入及Linux下动态链接的实现 收藏
- Linux入职基础-7.1_程序编译与链接的概要
- Linux下gcc编译动态链接库
- linux动态链接程序运行机制
- C++ 在 Linux下编译动态链接库
- 解决Linux程序编译链接动态库版本的相关问题