Bootstrap

LD_LIBRARY_PATH的使用

最近在公司的服务器上编译c++代码,由于是B/S结构的程序,所以需要将程序移植到另一台机器上,但是,当把程序scp到另一台机器上时,不能运行程序,出现了类似下面的提示:

error while loading shared libraries: libmysqlclient.so.18: cannot open shared object file: No such file or directory

通过查找资料发现,原来是动态链接库的原因,通过ldd命令,得到如下输出:

    libmysqlclient.so.18 => not found
    libstdc++.so.6 => /usr/lib64/libstdc++.so.6 (0x00002ace3fcab000)
    libm.so.6 => /lib64/libm.so.6 (0x00002ace3fea9000)
    libgcc_s.so.1 => /lib64/libgcc_s.so.1 (0x00002ace3ffff000)
    libc.so.6 => /lib64/libc.so.6 (0x00002ace4010c000)
    /lib64/ld-linux-x86-64.so.2 (0x00002ace3fb8f000)

由于库文件在连接(静态库和动态库)和运行(仅限于使用动态库的程序)时被使用,其搜索路径是在系统中进行设置的。一般linux系统把/lib和/usr/lib作为默认的库搜索路径,处于默认库搜索路径之外的库,需要用户将库位置添加到库的搜索路径之中。

后来发现linux系统的一个环境变量LD_LIBRARY_PATH,是用于指定查找动态库(共享库或者动态链接库)时除了默认路径之外的其它路径。(该路径在默认路径之前查找)

总结

移植程序时的经常碰到需要使用一些特定的动态库,而这些编译好的动态库放在我们自己建立的目录里,这时可以将这些目录设置到LD_LIBRARY_PATH中。

;