報錯libtest: error while loading shared libraries: libuv.so.1: cannot open shared object file: No such file or directory


使用g++編譯、運行libuv的demo錯誤解決

我們通過例子來講述監視器的使用. 例子中空轉監視器回調函數被不斷地重復調用,  通過例子我們也可以了解到:

由於設置了監視器, 所以調用 uv_run() 是程序會阻塞, 空轉監視器將會在計數器達到設定的值時停止(監視), uv_run() 會退出因為此時程序中沒有活動的監視器了.

測試代碼如下

 1 #include <stdio.h>
 2 #include <uv.h>
 3 
 4 int64_t counter = 0;
 5 
 6 static void wait_for_a_while(uv_idle_t* handle) {
 7     counter++;
 8 
 9     if (counter >= 10e6)
10         uv_idle_stop(handle);
11 }
12 
13 int main() {
14     uv_idle_t idler;
15     uv_idle_init(uv_default_loop(), &idler);
16     uv_idle_start(&idler, wait_for_a_while);
17 
18     printf("Idling...\n");
19     uv_run(uv_default_loop(), UV_RUN_DEFAULT);
20 
21     return 0;
22 }
View Code

 

g++ -c libuv_test.c  //生成libuv_test.o文件

g++ -o libuvtest libuv_test.o  /usr/local/bin/libuv.so  生成目標文件要包含libuv.so庫,這里需要全路徑,因為我們用到了它里面的函數。

chmod 755 libtest  //賦予執行權限

./libtest

報錯libtest: error while loading shared libraries: libuv.so.1: cannot open shared object file: No such file or directory

分析原因:ld提示找不到庫文件,而庫文件就在/usr/local/lib目錄中。

 

鏈接器ld默認的目錄是/lib和/usr/lib,如果放在其他路徑也可以,需要讓ld知道庫文件在哪里。

方法1:

編輯/etc/ld.so.conf文件,在新的一行中加入庫文件所在目錄;

運行ldconfig,以更新/etc/ld.so.cache文件;

方法2:

在/etc/ld.so.conf.d/目錄下新建任何以.conf為后綴的文件,在該文件中加入庫文件所在的目錄;

運行ldconfig,以更新/etc/ld.so.cache文件;

 我的解決辦法是:在./etc/ld.so.conf文件中添加了/usr/local/lib/ 

 

本人覺得第二種辦法更為方便,對於原系統的改動最小。因為/etc/ld.so.conf文件的內容是include /etc/ld.so.conf.d/*.conf

所以,在/etc/ld.so.conf.d/目錄下加入的任何以.conf為后綴的文件都能被識別到

 

ld.so.cache的更新是遞增式的,就像PATH系統環境變量一樣,不是從頭重新建立,而是向上累加。

除非重新開機,才是從零開始建立ld.so.cache文件。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM