linux x86下依赖于动态链接库so的cpp程序编译

来源:互联网 发布:t54原型车数据 编辑:程序博客网 时间:2024/05/21 11:27
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两个目录作为默认的库搜索路径,所以使用这两个目录中的库时不需要进行设置搜索路径即可直接使用。
对于处于默认库搜索路径之外的库,需要将库的位置添加到库的搜索路径之中。
原创粉丝点击