linux boost 例子 加 编译

在Linux下,使用Boost Asio库可以轻松实现非阻塞的网络API调用。以下是一个简单的例子,展示了如何设置一个非阻塞的TCP socket:

#include <boost/asio.hpp>
#include <iostream>
 
int main() {
    // 创建IO服务对象,它负责异步操作
    boost::asio::io_service io_service;
 
    // 创建一个非阻塞的socket对象
    boost::asio::ip::tcp::socket socket(io_service);
    boost::asio::ip::tcp::endpoint endpoint(
        boost::asio::ip::address::from_string("127.0.0.1"), 80);
 
    // 连接到远程端点,这里是本地的80端口,但不会阻塞
    boost::system::error_code ec;
    socket.open(endpoint.protocol(), ec);
    if (ec) {
        std::cout << "Error opening socket: " << ec.message() << std::endl;
        return -1;
    }
 
    socket.non_blocking(true); // 设置为非阻塞模式
    socket.connect(endpoint, ec);
 
    // 检查连接是否已经建立,如果socket是非阻塞的,connect可能会立即返回
    if (ec) {
        if (ec == boost::asio::error::would_block) {
            // 连接操作正在进行中,我们需要等待数据准备好读取或写入
            // 这里可以进行其他的非阻塞操作
        } else {
            std::cout << "Error connecting: " << ec.message() << std::endl;
            return -1;
        }
    }
 
    // 完成非阻塞socket的使用后,记得关闭它
    socket.close();
 
    return 0;
}

编译

g++  Fiber.cpp  -I /usr/include/boost  -L /usr/lib/x86_64-linux-gnu  -lboost_thread  -lpthread

在这个例子中,我们首先创建了一个io_service对象,这是Asio库用来处理异步操作的核心组件。然后,我们创建了一个tcp::socket对象并将其与一个端点(endpoint)相连。我们通过调用socket.open()打开了socket,并通过socket.non_blocking(true)将其设置为非阻塞模式。

当我们调用socket.connect()时,如果socket是非阻塞的,那么这个调用可能会立即返回,并且我们需要检查error_code来判断连接是否已经建立或者还在进行中。如果操作系统告诉我们操作将会阻塞(would_block),这时候我们可以进行其他的非阻塞操作。

最后,在使用完socket后,我们通过调用socket.close()来关闭它。这是一个非常基础的例子,展示了如何使用Boost Asio库来创建非阻塞的网络应用程序。

linux编译boost库并执行程序_linux boost-CSDN博客

g++ test-boost.cpp -o test -L /root/data/lib/linux -l:libboost_system.a -l:libboost_filesystem.a

如果-l:filename格式指定一个文件名,连接程序直接去找这个文件名了,不会再像使用-lname时将name扩展成lib<name>.a格式的文件名.
所以使用 -l:libpng.a这样的形式来指定连接库,就指定了静态连接png库。
当然如果库的位置不在gcc默认搜索路径中,要用-L参数另外指定搜索库的路径,否则连接程序不知道该从哪里找到filename。
 

  • 3
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值