libhv教程03--链库与使用

链库与使用

在上一篇中,我们已经生成了头文件与库文件,接下来我们写个测试程序链库验证下。

测试代码如下:

#include "hv/hv.h"

int main() {
    char exe_filepath[MAX_PATH] = {0};
    char run_dir[MAX_PATH] = {0};

    // 获取hv编译版本
    const char* version = hv_compile_version();

    // 获取可执行文件路径
    get_executable_path(exe_filepath, sizeof(exe_filepath));
    // 获取运行目录
    get_run_dir(run_dir, sizeof(run_dir));

    printf("exe_filepath=%s\n", exe_filepath);
    printf("run_dir=%s\n", run_dir);

    // 写日志
    LOGI("libhv version: %s", version);

    return 0;
}

编译运行:

$ cc -std=c99 test.c -o test -lhv
$ ./test
exe_filepath=/home/hw/github/libhv/test
run_dir=/home/hw/github/libhv
$ cat libhv*.log
2021-02-06 00:16:40.989 INFO  libhv version: 1.21.1.31 [test.c:19:main]

注:如在linux上遇到找不到库错误,请先确保是否已通过sudo make install安装过了,然后再执行sudo ldconfig刷新下链接库查找缓存,通过sudo ldconfig -p | grep libhv查看是否正确安装且能被链接器找到。
完整的编译->安装->检查步骤如下:

$ cd libhv
$ ./configure
$ make
$ sudo make install
$ sudo ldconfig
$ sudo ldconfig -p | grep libhv
        libhv.so (libc6,x86-64) => /usr/local/lib/libhv.so

如果安装到/usr/local目录下执行ldconfig后还是无法找到(一般是centos系统没有将/usr/local/lib目录加到ld.so.conf里),可以指定安装目录

./configure --prefix=/usr
make
sudo make install

如果你想链接使用当前代码目录lib下的库,而不是/usr/local/lib系统目录下的,可通过设置LD_LIBRARY_PATH环境变量来控制。

export LD_LIBRARY_PATH=./lib:$LD_LIBRARY_PATH

windows链库说明

cmake生成vs工程,打开hv.sln编译后会生成头文件include/hv、静态库lib/hv_static.lib和动态库lib/hv.dll,所以有动态库和静态库两种链库方式。

动态导入库hv.lib + 动态库hv.dll

工程 => 属性 => Linker => Input => Addtional Dependencies 加hv.lib
或代码里添加

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

静态库声明宏HV_STATICLIB + 静态库hv_static.lib

工程 => 属性 => c/c++ => 预处理器 => 预处理器定义中添加HV_STATICLIB预编译宏,以屏蔽hexport.h头文件中动态库导入宏

#define HV_EXPORT __declspec(dllimport)

工程 => 属性 => Linker => Input => Addtional Dependencies 加 hv_static.lib
或代码里添加

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

Tips

hv.lib是动态库的导入库,hv_static.lib是静态库,即所有.obj文件的archive归档,这两个库链接其一即可,如果选择链接静态库,才需要添加HV_STATICLIB预编译宏。

libhv是一款基于C语言的轻量级网络库,提供了HTTP服务端和客户端的支持。下面是使用libhv实现HTTP服务端的基本步骤: 1. 定义HTTP处理函数 首先需要定义一个处理HTTP请求的回调函数,可以是全局函数、静态函数或者成员函数。该回调函数会在每次收到HTTP请求时被调用,并传递HTTP请求和响应对象作为参数。例如: ```c++ #include "http_server.h" void on_http_request(const HttpRequest& req, HttpResponse& resp) { // 处理HTTP请求的代码 } ``` 2. 创建HTTP服务器对象 然后需要创建一个HTTP服务器对象,并设置它的监听地址和端口号。可以使用hv_http_server_create函数来创建HTTP服务器对象,并使用hv_listen_on_port函数设置监听地址和端口号。例如: ```c++ int main() { // 创建HTTP服务器对象 hv_http_server_t* server = hv_http_server_create(); // 设置监听地址和端口号 hv_listen_on_port(server, 8080); // 启动HTTP服务器 hv_run(loop); // 释放资源 hv_http_server_destroy(server); return 0; } ``` 3. 注册HTTP处理函数 接着需要注册HTTP处理函数,将处理HTTP请求的回调函数绑定到HTTP服务器对象上。可以使用hv_http_server_on_request函数来注册HTTP处理函数。例如: ```c++ int main() { // 创建HTTP服务器对象 hv_http_server_t* server = hv_http_server_create(); // 设置监听地址和端口号 hv_listen_on_port(server, 8080); // 注册HTTP处理函数 hv_http_server_on_request(server, on_http_request); // 启动HTTP服务器 hv_run(loop); // 释放资源 hv_http_server_destroy(server); return 0; } ``` 4. 处理HTTP请求 最后需要在HTTP处理函数中处理HTTP请求,并设置HTTP响应。HTTP请求和响应对象都提供了一些常用的属性和方法,可以根据需要进行设置。例如: ```c++ void on_http_request(const HttpRequest& req, HttpResponse& resp) { // 设置HTTP响应头 resp.add_header("Content-Type", "text/html; charset=UTF-8"); // 设置HTTP响应正文 resp.write("Hello, world!"); } ``` 在实际应用中,你需要根据具体的需求和场景,实现更加复杂的HTTP处理逻辑。同时还需要注意处理HTTP请求的线程安全性和异常处理等问题。
评论 12
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

ithewei

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值