精华内容
下载资源
问答
  • libuv编译

    2021-06-01 10:30:08
    windows 下载一个带有vcbuild.bat版本的libuv源码 下载gyp 将gyp解压在、libuv/build/gyp目录下 运行 vcbuild.bat vs2017 release x64 shared 自动生成dll,lib

    windows

    下载一个带有vcbuild.bat版本的libuv源码

    下载gyp

    将gyp解压在、libuv/build/gyp目录下

    运行 vcbuild.bat vs2017 release x64 shared

    自动生成dll,lib

    展开全文
  • libuv 编译

    2018-08-13 16:19:09
    转:libuv介绍 一、简介  1.开源跨平台的异步IO库(网络异步、文件异步等),它是node.js的底层库。  2.官方网站:http://libuv.org。  3.事件循环模型:IOCP、epoll、kqueue、event ports。  4.管理的模块...

    转:libuv介绍

    一、简介

     1.开源跨平台的异步IO库(网络异步、文件异步等),它是node.js的底层库。

     2.官方网站:http://libuv.org。

     3.事件循环模型:IOCP、epoll、kqueue、event ports。

     4.管理的模块(异步TCP、UDP sockets、DNS解析、异步文件读写、信号处理、高性能定时器、进程/线程池)。

     

    二、架构图

     

     

     

    三、原理

     1.异步:同时管理多个句柄请求。

     2.loop循环等待所有的事件和句柄。

     3.当其中有请求完成,loop就会监测到然后调用用户指定的回调函数。如:loop监听所有的socket,有数据来了,loop就会调相应回调函数。

     

    四、libuv编程思想

    1.创建一个对象,如:socket。

    2.让loop管理这个对象。

    3.指定一个回调函数,当有事件发生时调用这个回调函数(callback)。

     

     

    libuv的编译

     

    、官方源码下载

     1.可到 https://dist.libuv.org/dist 中选择各种版本。

     2.源码下载链接(https://dist.libuv.org/dist/v1.9.1/libuv-v1.9.1.tar.gz)。

     

    二、vs创建项目

     1.创建一个项目,并分好项目文件夹及项目筛选器。

    2.将libuv源码中的include、src两个文件夹添加到相应的项目筛选器中。

    (其实此处只添加头文件路径即可编译tongguo,为了项目查看各类声明方便,也把include文件夹中的头文件也拉入项目)。

    3.在项目属性添加头文件的搜索路径。

    4.配置windows的依赖lib库

      {

       #pragma comment(lib,"ws2_32.lib")

     #pragma comment(lib,"IPHLPAPI.lib")

       #pragma comment(lib,"Psapi.lib")

       #pragma comment(lib,"Userenv.lib")

      }

     

     

     

     

               程序代码

     

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

    //以下lib文件都已经添加到项目链接中Command Line中了;
    //#pragma comment(lib,"ws2_32.lib")
    //#pragma comment(lib,"IPHLPAPI.lib")
    //#pragma comment(lib,"Psapi.lib")
    //#pragma comment(lib,"Userenv.lib")

    //数据结构说明
    //struct uv_handle_t{
     //UV_HANDLE_FIELDS
    //}

    //struct uv_stream_s {
     //UV_HANDLE_FIELDS
     //UV_STREAM_FIELDS
    //};

    //struct uv_tcp_s {
     //UV_HANDLE_FIELDS
     //UV_STREAM_FIELDS
     //UV_TCP_PRIVATE_FIELDS
    //};

    static uv_loop_t* loop = NULL;
    static uv_tcp_t* l_server = NULL;//监听句柄;

    //当event loop检测到handle上有数据可以读时,就会调用此函数;
    //event loop知道有多少数据,需要函数准备好存放数据的内存;
    //handle:事件句柄;
    //suggested_size:建议分配的内存大小来存放数据;
    //buf:准备好的内存,内存地址传给event loop;
    static void uv_alloc_callb(uv_handle_t* handle,
    size_t suggested_size,
    uv_buf_t* buf)
    {
     if (handle->data != NULL)
     {
      free(handle->data);
     }
     buf->base = malloc(suggested_size);
     buf->len = suggested_size;
     //用handle句柄中void* data来保存开辟的内存buf->base,方便下次free
     handle->data = buf->base;
    }

    static void uv_close_callb(uv_handle_t* handle)
    {
     printf("client close\n");
     if (handle->data != NULL)
     {
      free(handle->data);
      handle->data = NULL;
     }
    }

    static void uv_shutdown_callb(uv_shutdown_t* req, int status)
    {
     uv_close((uv_handle_t*)req->handle, uv_close_callb);
     free(req);
    }

    static void uv_write_callb(uv_write_t* req, int status)
    {
     if (status == 0)
     {
      printf("write success\n");
     }

     if (req != NULL)
     {
      free(req->data);
     }
     free(req);
    }

    //stream: handle ---> uv_tcp_t;
    //nread: 读到多少字节数据;
    //buf: 数据内存,包含base:内存地址,len:内存长度;
    static void uv_read_callb(uv_stream_t* stream,
    ssize_t nread,
    const uv_buf_t* buf)
    {
     //链接断开了
     if (nread < 0)
     {
      uv_shutdown_t* req = malloc(sizeof(uv_shutdown_t));
      memset(req, 0, sizeof(uv_shutdown_t));
      uv_shutdown(req,stream, uv_shutdown_callb);
      return;
     }

     buf->base[nread] = 0;
     printf("nread:%d\n", nread);
     printf("recv:%s\n", buf->base);

     //测试发送给客户端
     uv_write_t* req_write = malloc(sizeof(uv_write_t));
     uv_buf_t* buf_write = malloc(sizeof(uv_buf_t));
     buf_write->base = buf->base;
     buf_write->len = nread;
     req_write->data = buf_write;
     uv_write(req_write, stream, buf_write, 1, uv_write_callb);
    }

    static void uv_connection(uv_stream_t* server, int status)
    {
     printf("new client comming\n");
     //接入客户端
     uv_tcp_t* client = malloc(sizeof(uv_tcp_t));
     memset(client, 0, sizeof(uv_tcp_t));
     //
     uv_tcp_init(loop, client);
     uv_accept(server, (uv_stream_t*)client);
     //让event loop做哪种管理;
     uv_read_start((uv_stream_t*)client, uv_alloc_callb, uv_read_callb);
    }

    int main(int argc, char** argv)
    {
     int ret;
     loop = uv_default_loop();
     //Tcp监听服务;
     uv_tcp_init(loop, (uv_tcp_t*)&l_server); //将监听句柄加入到event loop中;
     //需要event loop做哪种管理呢? 配置需要的管理类型;
     struct sockaddr_in addr;
     uv_ip4_addr("127.0.0.1", 6080, &addr); //ip地址 、 端口
     ret = uv_tcp_bind((uv_tcp_t*)&l_server, (const struct sockaddr*)&addr, 0);
     if (ret != 0)
     {
      goto failed;
     }
     //让event loop来管理监听;
     //event loop就会调用指定的这个函数uv_connection
     uv_listen((uv_stream_t*)&l_server, SOMAXCONN, uv_connection);

     uv_run(loop, UV_RUN_DEFAULT);
     printf("end\n");

    failed:
     system("pause");
     return 0;
    }

    展开全文
  • Libuv 编译

    2018-08-13 15:26:26
    环境:Win7 + VS2015 1:安装python 2.6或2.7(不兼容3.0以上) ,配置系统变量 “PYTHON=D:\ToolSoftware\Python\Python2.7.7\python.exe”,”PATH=D:\ToolSoftware\Python\Python2.7.7\” ...

    环境:Win7 + VS2015

    1:安装python 2.6或2.7(不兼容3.0以上) ,配置系统变量 “PYTHON=D:\ToolSoftware\Python\Python2.7.7\python.exe”,”PATH=D:\ToolSoftware\Python\Python2.7.7\”

    2:github上下载源码解压到本地文件夹。

    3:cmd 运行vcbuild.bat,如果弹出以下窗口:

    手动下载gyp,放在build文件夹下。再次vcbuild.bat。

    展开全文
  • libuv编译生成 1.cmake配置环境 2.完成后打开工程,右键INSTALL生成 3.编译结束可能遇到如下错误,将这个文件的文件编码改为UTF-8 BOM即可 4.最后将生成好的Include 和 lib拷出来 新建一个Qt工程 测试...

    libuv在windows安装

    libuv下载地址

     https://dist.libuv.org/dist/

    环境

    • cmake3.9.0
    • qt5.7+vs2013
    • libuv-v1.38.0

     

    libuv编译生成

    1.cmake配置环境

    2.完成后打开工程,右键INSTALL生成

    3.编译结束可能遇到如下错误,将这个文件的文件编码改为UTF-8 BOM即可

    4.最后将生成好的Include 和 lib拷出来

     

    新建一个Qt工程 测试libuv使用

    1.配置pro

    要根据实际情况设置库路径和包含目录,我是项目习惯设置的这种层级路径

    2.抄了一段官网代码来测试。。。

    #include "mainwindow.h"
    #include <QApplication>
    #include <QDebug>
    #include <uv.h>
    int main(int argc, char *argv[])
    {
        QApplication a(argc, argv);
    
        uv_loop_t *loop = (uv_loop_t *)malloc(sizeof(uv_loop_t));
        uv_loop_init(loop);
    
        qDebug()<<("Now quitting.\n");
        uv_run(loop, UV_RUN_DEFAULT);
    
        uv_loop_close(loop);
        free(loop);
    
        //    MainWindow w;
        //    w.show();
    
        return a.exec();
    }
    

    运行结果 

    Now quitting.

     

     

     

    展开全文
  • libUV库下载地址: ...解压之后,进入源文件打开readme.md文件就可以看到编译步骤 别人libUV的blog Build Instructions For GCC there are two build methods: via autotools or via GYP. ...
  • windows下libuv编译

    千次阅读 2018-05-21 09:39:57
    1、下载libuv下载地址:https://dist.libuv.org/dist/v1.20.3/libuv-v1.20.3.tar.gz2、安装git
  • libuv编译动态库异常

    2019-02-18 10:29:06
    用VS2015编译最新版的libuv动态库dll,但是不生成lib。 经查,发现要手动添加宏“BUILDING_UV_SHARED”。属性管理器里直接添加即可。 旧版已存在该宏,不必添加: ...
  • 1.下载libuv 2../configure --prefix=/home/share/lib_so/libuv/ 生成makefile ...查找makefile中的CFLAGS,默认为-O2,修改为-O0,即编译时不对代码进行优化。 3.make && make install ...
  • windows版本libuv编译

    2013-08-07 22:41:18
    https://github.com/joyent/libuv/releases   怎么查看各个分支是否稳定,请查看: https://github.com/joyent/libuv/blob/master/ChangeLog   安装git和python,python需要2.x版本,3.0以上版本不支持,我用...
  • 准备工作1、安装 NDK 下载对应版本,并添加安装路径至环境变量 (我用的是NDK14 rb,貌似最新的NDK编译有问题)2、下载libuv 源码,并解压,我下载的版本是v1.11.0 这里提一句,貌似v1.12.0版本生成的Makefile貌似有一...
  • libuv 是一个高性能的,事件驱动的I/O,并且支持多平台的网络库,接下来就手把手带你进入libuv编译安装的学习...
  • libuv交叉编译到arm

    2018-09-04 11:50:53
    本资源在 debian 9 交叉编译器版本arm-linuxgnueabihf-gcc -v gcc version 6.3.0 20170516 (Debian 6.3.0-18) 下成功编译生成arm-linux下能运行的库,暂时编译成功还没进行测试,
  • libuv交叉编译

    千次阅读 2018-03-20 14:04:58
    1.由于需要热插拔功能,所以 libuv 需要链接 udev 库,下面是 eudev 的交叉编译 eudev 下载地址: https://github.com/gentoo/eudev 解压,执行: ./autogen.sh CC=/opt/embedded/tools/bin/arm-linux-...
  • libuv编译

    2015-04-02 15:10:59
    一、先安装automake、libtool、autoconf这3个工具 apt-get install automake libtool autoconf 二、生成configure文件 三、./configure 生成makefile文件,可以根据需要来设置相关的参数,比如安装目录,编译器 ...
  • 编译 libuv 需要 gyp,编译 gpy 需要 python 2.7 的环境。 在系统环境变量中加入 python 的安装路径,默认如下:C:\Python27,重启电脑。 2、编译 (1)进入 gyp 根目录,执行命令:pythonsetup.py install 。 ...
  • 编译Libuv

    2019-10-09 06:05:29
    Libuv https://github.com/libuv/libuv LibSourcey是基于libuv,集合了第三方用于视频流的开源库,使用C++11。...Windows下编译代码 使用visual C++ 生成工具 (https://visualstudio.microsoft....
  • 为WebRTC引入libuv-编译

    2019-03-12 19:21:13
    编译静态库libuv,并public了它的头文件目录 写了一个可执行程序的模板,可以编译所有的测试Demo 目前仅仅在Mac平台测试了一下可行而已,其他平台参考改一下就好了 #----------------------------------------...
  • libuv android 交叉编译

    2021-03-18 11:42:50
    libuv android 交叉编译 详见:https://github.com/dawn9527/libuv_android_cross_complie
  • 编译libuv

    2017-01-31 18:20:00
    windows:  安装python  安装gyp  gyp是google的项目项目构建工具。下载地址https://github.com/turbulenz/gyp,...  编译libuv  在libuv文件夹中,运行vcbuild.bat,会提示Failed to download gyp. Make...
  • 1.由于需要热插拔功能,所以 libuv 需要链接 udev 库,下面是 eudev 的交叉编译 eudev 下载地址:https://github.com/gentoo/eudev 解压,执行: ./autogen.sh CC=/opt/embedded/tools/bin/arm-linux-gnueabihf...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 3,062
精华内容 1,224
关键字:

libuv的编译