linux下libuv庫安裝教程


下載並編譯libuv

libuv需要自己手動下載源碼,並手動編譯。
當前目錄為:/home/xlz/test/github/,在后面,會用$PATH來代替,我的系統的Debian8,64bit.

$git clone https://github.com/libuv/libuv.git
即可下載到libuv源碼
然后$cd libuv 進入到libuv源碼目錄下,准備編譯。
依次運行如下命令:
$ sh autogen.sh
$ ./configure
$ make
$ make check
$ sudo make install

備注:
如果提示缺少一些庫,請自行安裝,apt-get install packagename
如,我運行autogen.sh的時候,就提示缺少automake,libtoolize庫:
xlz@debian:~/test/github/libuv$ sh autogen.sh
autogen.sh: 1: autogen.sh: automake: not found
autogen.sh: 33: test: Illegal number:
autogen.sh: 34: test: Illegal number:

  • libtoolize --copy
    autogen.sh: 43: autogen.sh: libtoolize: not found

運行如下命令,手動安裝,即可:
$ sudo apt-get install automake
$ sudo apt-get install libtool

編寫測試代碼:

在$PATH的libuv目錄下新建xlz_test.c

/*
 * xlz_test.c
 * empty msg loop
 * 這個例子新建了一個消息隊列,但隊列里沒有任何消息,程序直接退出
 * Created on 2016/9/10
 */

#include <stdio.h>
#include <stdlib.h>
#include "include/uv.h"

int main(char argc, char *argv[])
{
    uv_loop_t *loop = uv_loop_new();  // 可以理解為新建一個消息隊列
    uv_run(loop, UV_RUN_DEFAULT);     // 啟動消息隊列,UV_RUN_DEFAULT模式下,當消息數為0時,就會退出消息循環。
    printf("hello, world\n");
    return 0;
}
編譯及鏈接:

在$PATH的libuv目錄下,命令行執行如下命令,如果當前文件夾下沒有build目錄,就請先創建一個build目錄

$gcc -c xlz_test.c -o xlz_build/xlz_test.o    // 編譯,生成xlz_test.o文件
$gcc xlz_test.c -L/usr/local/lib/ -luv -o x_test    // 鏈接生成可執行文件
//也可使用如下命令進行鏈接:
$gcc =o xlz_test xlz_test.o /usr/local/lib/libuv.so   //生成目標文件要包含libuv.so庫,這里需要絕對路徑,因為我們用到了它里面的函數。
//$gcc -lpthread -o xlz_test xlz_build/xlz_test.o /usr/local/lib/libuv.a

上面第二條編譯,連接libuv.a庫的時候,我的是在這個目錄下,因為我的系統都是Debian 8, 64bit,
可能不同的系統位置是不同的,有的人可能在/usr/lib64/下或者其他目錄下,請自行定位。
注意:有的系統在鏈接為可執行文件后,執行程序時可能會報錯,或者無法連接為可執行程序:
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為后綴的文件,如

$sudo vim libuv.conf

在libuv.conf文件中加入庫文件所得目錄作為內容;
運行,如下命令,以更新/etc/ld.so.cache文件;

$sudo ldconfig

我參考別人博客,也選擇方案2:
在/etc/ld.so.conf/目錄下新建libuv.conf文件,並在libuv.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文件。

關於ld.so.cache文件,暫時就不深入研究了,后續慢慢學習吧,先學libuv要緊。

執行程序

如果前面沒有錯誤的話,你會在$PATH下得到可執行程序文件test,在命令行下執行./xlz_test就可以得到如下結果了。
hello world

最后補張libuv的圖

參考:
http://blog.csdn.net/limite_god/article/details/43565253
http://blog.csdn.net/bingqingsuimeng/article/details/8237869
http://www.cnblogs.com/lisuyun/p/7080401.html


免責聲明!

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



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