下载并编译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

最新文章

  1. canvas的save与restore方法的作用
  2. [bzoj1122][POI2008]账本BBB
  3. 基于Grunt&amp;Mocha 搭建Nodejs自动化单元测试框架(含代码覆盖率统计)
  4. OC中快速创建NSNumber NSDictionary NSArray的方法
  5. 设计模式(Java版)-创建型模式之简单工厂模式
  6. js记录用户行为浏览记录和停留时间(转)
  7. Java设计模式菜鸟系列(四)工厂方法模式建模与实现
  8. javascript字符串属性及常用方法总结
  9. Windows下mysql忘记root密码
  10. Python中使用type、metaclass动态创建方法和属性
  11. iOS开发基础-UITableView控件简单介绍
  12. mongodb集群配置分片集群
  13. MySql安全模式的关闭和开启
  14. nvm npm node
  15. CSV是什么文件格式【转】
  16. Django之ORM使用以及模板语言
  17. 149. Max Points on a Line (Array; Greedy)
  18. CentOS6.5 安装mysql-5.7.9
  19. Xception
  20. C#驱动级模拟按键操作

热门文章

  1. [从产品角度学EXCEL 01]-EXCEL是怎样运作的
  2. MySQL 从 5.5 升级到 5.6,启动时报错 [ERROR] Plugin &#39;InnoDB&#39; init function returned error
  3. highlight高亮风格
  4. 分分钟教你从根本上认识Struts2框架
  5. 使用SVG绘制湖南地图
  6. zookeeper_service 出错 ........... are only available on JDK 1.5 and higher
  7. ORACLE 11G EXPDP交互模式 interactive mode
  8. maven 配置问题
  9. Android Studio 导出jar包
  10. ROW_NUMBER()与PARTITION BY 实例