您的位置:首页 > 运维架构 > Linux

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两个目录作为默认的库搜索路径,所以使用这两个目录中的库时不需要进行设置搜索路径即可直接使用。

对于处于默认库搜索路径之外的库,需要将库的位置添加到库的搜索路径之中。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  动态链接库 so 编译