zoukankan      html  css  js  c++  java
  • 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
    ");
        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

    转载本Blog文章请注明出处,否则,本作者保留追究其法律责任的权利。 本人转载别人或者copy别人的博客内容的部分,会尽量附上原文出处,仅供学习交流之用,如有侵权,联系立删。
  • 相关阅读:
    怎样使用Chrome模拟手机浏览器測试移动端网站
    [Erlang危机](5.1.3)进程
    Oracle ErrorStack 使用和阅读具体解释
    动态规划之整齐打印
    struts2+Oracle实现管理员查看用户提交的意见功能
    hdu 4956 Poor Hanamichi BestCoder Round #5(数学题)
    2014牡丹江——Known Notation
    诗云:静观天下
    QQ欢乐斗地主心得体会 (三):高倍场攻略
    QQ欢乐斗地主心得体会 (三):高倍场攻略
  • 原文地址:https://www.cnblogs.com/drfxiaoliuzi/p/5881059.html
Copyright © 2011-2022 走看看