linux程式安裝部署執行方式與我們熟知的windows程式有很大的不同:
在windows上,一般exe程式載入dll的路徑順序是:首先是當前路徑,然後是系統配置的path環境變數
在linux上,可執行程式載入動態庫so檔案的路徑順序是:系統配置的ld_library_path路徑。(當前路徑不在載入so的路徑上)
也就是說,如果在linux上將程式部署在非標準路徑上,程式如果需要載入自己實現的so檔案,會找不到so檔案,即使so檔案和程式在同乙個目錄。
在開發層面,即使使用dlopen手動載入so檔案,除非使用絕對路徑,否則也不能開啟
可以使用ldd命令檢視當前程式所需要載入的so是否都能找到:ldd ./程式名
解決linux部署出現上述問題的方案有兩種:
第一種:將程式按照標準方式部署安裝
第二種:配置當前ld_library_path,將當前路徑加入到ld_library_path
對於第二種方案,這裡給出乙個一勞永逸的方案,達到與windows下相同的效果:
修改配置檔案,如果只想改當前使用者,則修改 /bashrc或/bash_profile,如果想修改整個系統則修改/etc/profile 建議修改當前使用者配置檔案
這裡以修改當前使用者的配置為例:
在配置檔案中新增兩行(如果只想將某個路徑加入,修改下面的./為希望加入的路徑,例如:/usr/local)
ld_library_path=./
export ld_library_path
修改完成之後儲存檔案,登出當前使用者重新登入即可
linux 下建立並動態載入 so 檔案
最簡單的生成,動態載入.so 檔案的例子 ifndef test h define test h include using namespace std void showmessage endif gcc shared fpic test.cpp o libtest.so.1.0 建立鏈結 ln ...
Silverlight程式無法載入的原因
昨天在公司做了乙個silverlight的專案,想回家看看,結果到家用vs2010開啟一看,卻發現無法引導程式。出現如下圖所示的錯誤 可以看到是我的.csproj檔案出現了問題,於是開啟slmvvmtest.csproj檔案,可以看到如圖所示 在 silverlight這一行出現了問題。這是我發現其...
Tomcat 部署專案無法載入靜態資源
首先,我的eclipse是引用外部的tomcat 引用外部tomcat會在左側生成乙個server資料夾,相當於複製了乙份tomcat到eclipse的安裝目錄裡 具體tomcat所在目錄可以在這進行檢視 雙擊tomcat服務,會開啟乙個視窗,然後點選open launch configuratio...