【libuv高效编程】libuv学习超详细教程1——libuv的编译与安装

libuv简介

libuv 是一个高性能的,事件驱动的I/O,并且支持多平台的网络库,比如Node.js、Luvit、Julia、pyuv等大型的软件都有使用它进行开发,这足以看出它的性能优越性。

其实高性能的网络库在github有非常多,比如libevent、libev、libhv等库,libevent、libev、libuv都是c语言实现的异步事件库、libhv是国内开发者使用C++实现的异步事件库,但是我还是选择了libuv,因为它足够强大,并且支持多平台,编程还非常方便简洁。

也可以看看下图的简单对比,主要是对比github上的star与fork(当前时间是 2020-4-17 星期五):

libuv001

下载libuv

在linux系统下,可以通过git去拉取libuv的源码并且使用。

安装必要的依赖

ps:如果你系统中有就不用去安装了。

sudo apt-get -y install git automake libtool

拉取libuv源码

打开libuv的github仓库:https://github.com/libuv/libuv ,了解一下相关的说明信息,然后可以拉取下来:

libuv002

git clone https://github.com/libuv/libuv.git

如果觉得太慢,可以从gitee下载:

git clone https://gitee.com/jiejieTop/libuv.git

切换到v1.36.0版本分支

git checkout v1.36.0

当然你要是留意看的话,里面还有227release 版本,你也可以通过wget或者浏览器去下载它们,它们的格式有zip、tar.gz等压缩格式,目前最新发布的release版本是v1.36.0

libuv003

编译使用

其实如果单纯使用libuv的话,是非常简单的,直接在系统安装即可,但是我想编译一些其他的功能,比如libuv的一些说明文档、man手册等,那么就自己下载源码编译,首先进入libuv目录下,可以看到当前的分支是默认的分支——v1.x,这其实是开发版本,最近这两天都有开发的,反正我们用就对了:

➜  libuv git:(v1.x) ls                                   
AUTHORS         configure.ac     include       m4              src
autogen.sh      CONTRIBUTING.md  libuv.pc.in   MAINTAINERS.md  SUPPORTED_PLATFORMS.md
ChangeLog       docs             LICENSE       Makefile.am     test
CMakeLists.txt  img              LICENSE-docs  README.md       tools

用autotools工具自动配置:

./autogen.sh 
./configure

然后编译并安装:

make
sudo make install

ps:还有个检查的命令:make check,不过我在运行的过程中报错了,测试不通过,暂时别管他吧。。。

验证编译安装是否完成

在安装完成后,你可以看到在/usr/local/lib/目录下有libuv的静态库、动态库等内容:

ls /usr/local/lib/
libuv.a  libuv.la  libuv.so  libuv.so.1  libuv.so.1.0.0

/usr/local/include/目录下也有一个uv文件夹、还有一个uv.h头文件。

ls /usr/local/include/          
uv  uv.h

简单实用

随便写个代码,打印一下安装的libuv库的版本:

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

int main() 
{
    char *version;
    
    version = (char*) uv_version_string();

    printf("libuv version is %s\n", version);

    return 0;
}

编写Makefile,指定编译的规则并且编译它,需要注意的是需要指定链接libuv库-luv,这是动态链接的方式:

CC=gcc
SRC = $(wildcard *.c */*.c)
OBJS = $(patsubst %.c, %.o, $(SRC))
DEP_FILES := $(patsubst %, .%.d,$(OBJS))
DEP_FILES := $(wildcard $(DEP_FILES))
FLAG = -g -Werror -I. -Iinclude -lpthread -luv
TARGET = targets

$(TARGET):$(OBJS)
	$(CC) -o $@ $^ $(FLAG)

ifneq ($(DEP_FILES),)
include $(DEP_FILES)
endif

%.o:%.c
	$(CC) -o $@ -c $(FLAG) $< -g -MD -MF [email protected]

clean:
	rm -rf $(TARGET) $(OBJS)

distclean:
	rm -rf $(DEP_FILES)

.PHONY:clean

当编译完成后,可以看到产生的可执行文件,可以使用ldd命令去查看它的依赖,可以看到它依赖系统的/usr/local/lib/libuv.so.1

➜  001 make
gcc -o demo.o -c -g -Werror -I. -Iinclude -lpthread -luv demo.c -g -MD -MF .demo.o.d
gcc -o targets demo.o -g -Werror -I. -Iinclude -lpthread -luv

➜  001 ls
demo.c  demo.o  Makefile  targets

➜  001 ldd targets 
        linux-vdso.so.1 (0x00007fffa5bc6000)
        libuv.so.1 => /usr/local/lib/libuv.so.1 (0x00007f8346e7b000)
        libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007f8346a8a000)
        librt.so.1 => /lib/x86_64-linux-gnu/librt.so.1 (0x00007f8346882000)
        libpthread.so.0 => /lib/x86_64-linux-gnu/libpthread.so.0 (0x00007f8346663000)
        libdl.so.2 => /lib/x86_64-linux-gnu/libdl.so.2 (0x00007f834645f000)
        /lib64/ld-linux-x86-64.so.2 (0x00007f83472ac000)
➜  001 

运行:

./targets 

libuv version is 1.36.0

猜你喜欢

转载自blog.csdn.net/jiejiemcu/article/details/105586752