1. 程式人生 > >[Linux] 如何讓linux載入當前目錄的動態庫

[Linux] 如何讓linux載入當前目錄的動態庫


linux的excutable在執行的時候預設是先搜尋/lib和/usr/lib這兩個目錄,然後按照ld.so.conf裡面的配置搜尋絕對路徑,linux預設是不會在當前目錄搜尋動態庫的。windows載入動態庫的時候,預設是首先載入本地目錄下的動態庫,然後再搜尋windows/system和windows/system32目錄。
windows的動態庫搜尋順序,雖然有可能會造成潛在的混亂,但是對於開發和測試無疑是比較方便的,尤其是debug和release版本的動態庫需要經常切換進行測試的時候。linux的動態庫搜尋順序雖然可以說成是比較嚴謹,但是相對來說也比較呆板,有時候會造成不便。

其實,linux也可以支援“載入當前目錄的動態庫”。只要設定合適的環境變數LD_LIBRARY_PATH就可以了。設定方法有以下三種:

1、臨時修改,log out之後就失效
在terminal中執行:export LD_LIBRARY_PATH=./

2、讓當前帳號以後都優先載入當前目錄的動態庫
修改~/.bash_profile在檔案末尾加上兩行: LD_LIBRARY_PATH=./ 和 export LD_LIBRARY_PATH

3、讓所有帳號從此都優先載入當前目錄的動態庫
修改/etc/profile在檔案末尾加上兩行: LD_LIBRARY_PATH=./ 和 export LD_LIBRARY_PATH

PS:修改ld.so.conf不能達到我們的目的,因為ld.so.conf只支援絕對路徑。

相關推薦

linux載入當前目錄動態

 linux的excutable在執行的時候預設是先搜尋/lib和/usr/lib這兩個目錄,然後按照ld.so.conf裡面的配置搜尋絕 對路徑,linux預設是不會在當前目錄搜尋動態庫的。windows載入動態庫的時候,預設是首先載入本地目錄下的動態庫,然後再搜尋 win

[Linux] 如何linux載入當前目錄動態

linux的excutable在執行的時候預設是先搜尋/lib和/usr/lib這兩個目錄,然後按照ld.so.conf裡面的配置搜尋絕對路徑,linux預設是不會在當前目錄搜尋動態庫的。windows載入動態庫的時候,預設是首先載入本地目錄下的動態庫,然後再搜尋window

ubuntu linux 載入當前目錄動態

linux的excutable在執行的時候預設是先搜尋/lib和/usr/lib這兩個目錄,然後按照ld.so.conf裡面的配置搜尋絕對路徑,linux預設是不會在當前目錄搜尋動態庫的。windows載入動態庫的時候,預設是首先載入本地目錄下的動態庫,然後再搜尋windows/system和windows/

linux載入當前目錄動態

linux的excutable在執行的時候預設是先搜尋/lib和/usr/lib這兩個目錄,然後按照ld.so.conf裡面的配置搜尋絕對路徑,linux預設是不會在當前目錄搜尋動態庫的。windows載入動態庫的時候,預設是首先載入本地目錄下的動態庫,然後再搜尋wind

Linux 當前目錄動態鏈接找不到問題【轉載】

exc 查看 log term 環境 ubunt 順序 lin win linux的excutable在執行的時候缺省是先搜索/lib和/usr/lib這兩個目錄,然後按照ld.so.conf裏面的配置搜索絕對路徑,linux缺省是不會在當前目錄搜索動態庫的。windows

linux檢視當前載入的所有動態

因為之前用的一個動態庫現在要換一個版本,所以就想看一下這個庫是否還在載入。 轉自:http://blog.csdn.net/leo115/article/details/7773887 在我們做Linux開發的時候,往往會出現 某些庫 can not found 的

linux命令之新增系統搜尋動態目錄-ldconfig

ldconifg,/etc/ld.so.conf,/etc/ld.so.cache三個的關係 一般情況下我們可以將程式需要搜尋動態庫的路徑配置到ld_library_path這個環境變數中,不過很多系統的庫我們沒有配置到這個環境變數中也是可以找到的,ldconfig就如同w

VS2017 Linux C++引用自定義的動態

++ -1 undefined mage 編譯運行 linux下 lin 套路 log 前一篇博客講了用系統庫libpthread.so的例子,只需要在項目屬性頁的[C++->命令行參數]和[鏈接器->命令行參數]中加上對應參數(比如-pthread)即可,然後

linux命令之檢視程序執行動態依賴及開啟檔案-lsof

ldd命令可以看到程式依賴庫,但是有的動態庫是使用dlopen介面隱式載入的方式載入起來的,這個時候使用ldd命令是看不見的。 不過有另一個命令lsof,lsof命令可以看見執行中的程序載入了哪些動態庫,lsof是list open file的簡寫,所以lsof還可以看見程

linux 面試題過濾當前目錄下一級目錄

li -l | grep '^d' ls -F | grep '/$' ls -p | grep '/$' find -maxdepth 1 -type d ! -name "." ls -l | sed -n '/^d/p' ls -l | awk '/^d/' ls -l | awk '{if(

linux 使用readelf命令檢視.so動態的真實名

linux strip 可以去除連結資訊 讓nm看不到 但是readelf 用-s引數 仍然可以看到 例如readelf -s libACE-5.7.1.so 使用readelf檢視動態庫的真實名字 readelf -d 動態庫檔案 檢視共享庫的依賴庫(NEEDED)和搜尋

linux命令列查詢當前目錄下所有檔案是否包含特定string

grep // -n 帶行號 (自測可用) #grep -n -r "blog_name," * wp-admin/admin-header.php:118:unset($title_cla

linux下獲取程式當前目錄絕對路徑

1. Shell 版本    #獲取當前指令碼所在絕對路徑    cur_dir=$(cd "$(dirname "$0")"; pwd)2. C語言版本 方法一、用realpath函式。這種方法用於開機啟動程式獲取自身目錄會出錯 char current_absolut

自己在linux上編譯、連結、動態和靜態的學習筆記

在平常的專案中,我們都是使用公司要求的makefile、makedebug一類的檔案,因此,在編譯、連結、生成和連結動態庫與靜態庫的時候,我們只是簡單的使用一些已經設定的變數,只是簡單的修改、新增一些檔名,或許這次我們編譯通過了,但是,在某一個時候,可能出現了一個問題,無論

linux設定可以在當前目錄查詢可執行檔案的方法

建立一個新使用者test5,指定使用者的宿主目錄為/home/test5 useradd -d /home/test5 test5 如何讓linux在當前目錄下找到可執行程式 第一步,沒有引數的cd命

linux c 語言程式設計環境:動態和靜態的製作

庫: 庫用於將相似函式打包在一個單元中。然後這些單元就可為其他開發人員所共享,並因此有了模組化程式設計這種說法 — 即,從模組中構建程式。Linux 支援兩種型別的庫,每一種庫都有各自的優缺點。靜態庫包

linux下如何將當前目錄的檔名存到一個文字檔案裡

public class GetFileName { public static String [] getFileName(String path) { File file = new File(path); String [] fileName = fi

linux如何檢視程式連結的動態

Linux linux下有一個命令可以檢視 ldd example.out ARM Linux arm-linux-gnueabihf-readelf -d example.so 根據

release程式載入呼叫ffmpeg動態崩潰

本人在開發音視訊專案時在釋出release版本時遇到ffmpeg庫呼叫崩潰,也是定位了很久。一下是vs工程和qt工程的解決辦法: 1.vs的工程屬性修改聯結器->優化->引用  2.如

Linux 動態載入

動態庫執行時搜尋順序 1.LD_PRELOAD   LD_PRELOAD是一個環境變數,用於動態庫載入,動態庫載入的優先順序最高;   2.-wl,-rpath   編譯目的碼時指定的動態庫搜尋路徑(指的是用-wl,-rpath),readelf -d 命令可以檢視編譯的目標檔案中rpat