tableview动态修改和删除_Ubuntu加载动态库失败的解决方案
在ubuntu下代碼編譯通過的情況下,經常出現運行時加載動態庫出錯的情況。這些問題很瑣碎,不具備任何技術含量,純屬耽誤時間,這也是linux系統的通病,花里胡哨,故弄玄虛。
為了減少初學者在這種無意義的事情上浪費大量的時間,本文對這個問題提供一點解決方案,這些方案都是在Ubuntu18.04上測試過的,希望對需要者有所幫助。
這里使用的是最小化的代碼,主程序是mytest,其運行時需要調用libtest.so, 成功調用后輸出信息:Hello Shared Library!
否則會抱怨找不到動態庫。
本文的工作目錄為/home/eric/dlltest
error while loading shared libraries:libtest.so: cannot open shared object file: No such file or directory
這就對了,符合本文的預期,libtest.so已經被移除了,所以會報錯。
下面將libtest.so拷貝回來。
有:
可見這樣mytest就找到了動態庫libtest.so。
再次將libtest.so移動到/home/eric/lib/下面,有:
這時候,
dlltest下面只有mytest執行文件,繼續測試有:
錯誤繼續出現,這樣就對了。下面想辦法能夠讓mytest程序能夠找到動態庫libtest.so。
第一種方法:
使用
可以看到,動態庫找到了,然而這種方法關閉了窗口之后就沒效果了。
重啟命令窗口后問題繼續出現,
這時候需要
第二種方法,修改.bashrc文件
進入到/home/eric下(eric是本文在ubuntu上的用戶名)
在.bashrc文件末尾加入:
export LD_LIBRARY_PATH=/home/eric/lib:$LD_LIBRARY_PATH
也就是上圖第121行,保存退出后,運行source .bashrc
可見/home/eric/lib 已經在庫路徑里面了。
這是進入到/home/eric/dlltest目錄:
可見,這次動態庫路徑是對的,為了保險起見,關閉窗口,重新打開,有:
可見還是可以找到的。
下面將export LD_LIBRARY_PATH=/home/eric/lib:$LD_LIBRARY_PATH 從/home/eric/.bashrc文件中注釋掉。
可見還是找的到動態庫,這不科學!
查看庫路徑果然/home/eric/lib還在,這時候需要運行下source .bashrc,可以看到庫變量改變了。
不過雖然是庫變量改變了,但是還是系統找得到動態庫libtest.so,只好關閉窗口重啟了:
這次是真的找不到了。
linux系統下就是經常發生這種非常微妙的小插曲,當你以為搞定了,實際上卻是錯誤的結論,好在本文用了一個最小出錯模型,有大量的時間可以耗下去,如果在生產環境,這種代價是承受不起的。
這樣第二種方法也測試成功了。下面介紹第三種方法。
第三種方法,修改/etc/ld.so.conf文件
本文的/etc/ld.so.conf內容為:
加上路徑/home/eric/lib/
有:
修改后保存。
繼續測試mytest,可見還是找不到庫。
這是需要運行sudo ldconfig:
本文運行的當前目錄是/home/eric/dlltest
可見sudo ldconfig命令不挑當前目錄。
為了保險起見,關閉窗口,重新啟動:
可見還是可以找得到的,說明此方法可行。
繼續修改etc/ld.so.conf文件,刪除路徑/home/eric/lib/,并運行sudo ldconfig等有:
說明又找不到了,好的,符合預期,重啟窗口試一下,雖然不大有可能出現反常,但是怕了,必須驗證!
還是沒找到,說明的確第三種方法是起作用的。
下面介紹第四種方法:
第四種:在/etc/ld.so.conf.d/目錄下添加youtest.conf文件
文件內容為/home/eric/lib/
也就是動態庫libtest.so的所在路徑。
可以看到youtest.conf文件產生了。
這是運行mytest測試一下:
沒找到,這符合預期,還沒有使用sudo ldconfig命令
可見,這次文件youtest.conf起作用了,文件名youtest.conf是為了避嫌,也就是這個可以和mytest不一樣,當然后綴名是需要.conf就行。
再次重啟窗口,
可見還是可以找得到動態庫。
說明這種方法也是成功的。
綜上所述,本文介紹了找動態庫的四種方法,也許方法可能會有千千萬萬種,但是本文不感興趣,有了這幾種方法后,初學者容易有獲得感和幸福感,從而有進一步學習的勇氣和道路自信,其它的方法都可以觸類旁通,進而獲得更大意義上的自由。
應該說,本文的環境是WSL下的ubuntu18.04,在其它系統上可能會產生一些細微的差異,需要靈活運用。
后面有時間的話還會有些類似的文章,掃清這種沒有任何技術含量的學習障礙,從而使初學者能夠將有限的時間放到有價值的事情上去。
與50位技術專家面對面20年技術見證,附贈技術全景圖總結
以上是生活随笔為你收集整理的tableview动态修改和删除_Ubuntu加载动态库失败的解决方案的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: python执行bat文件_Python
- 下一篇: python给生活带来哪些改变_你们觉得