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
linux下libuv库安装教程的更多相关文章
- Linux下nginx编译安装教程和编译参数详解
这篇文章主要介绍了Linux下nginx编译安装教程和编译参数详解,需要的朋友可以参考下 一.必要软件准备1.安装pcre 为了支持rewrite功能,我们需要安装pcre 复制代码代码如下: # y ...
- Linux下RocketMQ下载安装教程
一.下载 1.官网下载:下载地址 2.百度网盘下载:下载地址 提取码:0g5a java开发工具下载地址及安装教程大全,点这里. 更多深度技术文章,在这里. 二.安装及启动 1.将zip文件上传到 ...
- linux下的powerline安装教程
powerline是一款比较炫酷的状态栏工具,多用于vim和终端命令行.先上两张效果图,然后介绍一下具体的安装教程. 图 1 powerline在shell下的效果图 图 2 powerline在vi ...
- Linux下DB2数据库安装教程
最近因为工作需要在学习DB2数据库,本教程讲解DB2数据库在inux下的安装步骤. 安装前请查看 DB2版本和许可证 说明来增加了解,先弄明白改安装什么版本,这里我用的是最新的Express-C版本, ...
- phpmyadmin在linux下通过sock安装教程
当初是按照 http://www.cnblogs.com/freeweb/p/5262852.html 地址参考安装,因为疏忽,未考虑到版本差异带来的影响(自身安装的是最新版 phpMyAdmin-4 ...
- Linux(centos)下mysql编译安装教程
Linux下mysql编译安装教程 #查看linux发行版本 cat /etc/issue #查看linux内核版本号 uname -r 本文測试环境centOS6.6 一.Linux下编译安装MyS ...
- Linux下的GitHub安装与简单配置教程 ~ 转载
Linux下的GitHub安装与简单配置教程 1.GitHub简介 Git是一个分布式版本控制系统,与其相对的是CVS.SVN等集中式的版本控制系统. 2.Git的安装 1)安装Git a.查看与 ...
- Linux下MiniGUI库的安装
Linux下MiniGUI库的安装 今天试了下安装MiniGUI的库 先仿照官网的教程安装 传送门:MiniGUI官网 一.配置依赖环境 安装构建工具 apt install binutils aut ...
- ArcGIS 10.1 for Server安装教程系列—— Linux下的单机安装
http://www.oschina.net/question/565065_81231 因为Linux具有稳定,功能强大等特性,因此常常被用来做为企业内部的服务器,我们的很多用户也是将Ar ...
随机推荐
- web api7
- php实现返回上一页的功能
php实现返回上一页的功能的3种有效方法 header(location:你的上一页的路径); // 注意这个函数前不能有输出 header(location:.getenv(&qu ...
- oracle用户创建
Microsoft Windows [版本 6.1.7601]版权所有 (c) 2009 Microsoft Corporation.保留所有权利. G:\Users\Admin>sqlplus ...
- Java虚拟机及运行时数据区
1.Java虚拟机的定义 Java虚拟机(Java Virtual Machine),简称JVM.当我们说起Java虚拟机时,可能指的是如下三种不同的东西: 抽象的虚拟机规范 规范的具体实现 一个运行 ...
- php文件锁
前言 1.锁机制之所以存在是因为并发问题导致的资源竞争,为了确保操作的有效性和完整性,可以通过锁机制将并发状态转换成串行状态.作为锁机制中的一种,PHP 的文件锁也是为了应对资源竞争.假设一个应用场景 ...
- 5. web前端开发分享-css,js深化篇
一. css练习网易专题: 1. http://news.163.com/ 新闻 跟腾讯的新闻版式大体没有大的变化,只是细节. 2. http://news.163.com/photo/#Curren ...
- python --> 递归 以及装饰器
一.递归知识 函数迭套执行,逐层执行之后,满足某个条件之后就会停止执行,将return值返回上层的函数,上层函数再逐层返回,最终返回给最初始函数. 递归在斐波那契数列的应用[斐波那契数列特点:前两个数 ...
- OPP Services Log
SELECT FCPP.CONCURRENT_REQUEST_ID REQ_ID, FCP.NODE_NAME, FCP.LOGFILE_NAME FROM FND_CONC_PP_ACTIONS ...
- Toad各版本所包含的组件
Toad for Oracle Base Edition Toad for Oracle Knowledge Xpert for PL/SQL Knowledge Xpert for Oracle A ...
- Cocos2d-JS/Ajax用Protobuf与NodeJS/Java通信
原文地址:http://www.iclojure.com/blog/articles/2016/04/29/cocos2d-js-ajax-protobuf-nodejs-java Google的Pr ...