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中。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章