libco配置、编译 初体验 - 腾讯协程开源库

在某度上搜索libco全都是源码分析,像我这样的菜鸡使用Makefile时还是有点小挫折的,下面我们一起体验一下书写编译第一个ibco程序。

博客一级目录

二级目录——libco源码分析/学习笔记

下载源代码

github:https://github.com/WbtLm/libco

打开上述网址,点击如下图所示的绿色按钮,选择Download Zip:

将zip解压,(我将里面所有文件都拷贝到了/home/用户名/libco/文件夹下)

书写代码

我们书写第一个libco的源代码“new.cpp”:

我是参考example_echosvr.cpp书写的。头文件直接拷贝就好。

#include "co_routine.h"

#include <stdio.h>
#include <stdlib.h>
#include <stdint.h>
#include <sys/time.h>
#include <stack>

#include <sys/socket.h>
#include <netinet/in.h>
#include <sys/un.h>
#include <fcntl.h>
#include <arpa/inet.h>
#include <unistd.h>
#include <errno.h>
#include <sys/wait.h>

#ifdef __FreeBSD__
#include <cstring>
#include <sys/types.h>
#include <sys/wait.h>
#endif

#include<iostream>
using namespace std;

static void* A(void *arg) {
   printf("1 ");
   co_yield_ct();  // 切出到主协程
   printf("2 ");
}

static void* B(void *arg) {
    using namespace std;
  printf("x ");
  co_yield_ct();  // 切出到主协程
  printf("y ");
}
struct task_t
{
    stCoRoutine_t *co;
    int fd;
};
typedef struct task_t task_t;
int main(void) {
    stCoRoutine_t *coa,*cob;
    taska->fd=-1;
    taskb->fd=-1;
    co_create(&coa,NULL,A,NULL);//**stCoRoutine_t, *attr(shareMem),pfn,*arg
    co_create(&cob,NULL,B,NULL);
    co_resume(coa);
    co_resume(cob);
    co_resume(coa);
    co_resume(cob);
    printf("\n");
}

配置Makefile

初始Makefile文件是没有我们当前的源文件“new.cpp”的命令的。我们将new.cpp放入libco根目录下,新建一个终端,使用vim打开Makefile文件

vim Makefile

找到PROGS的定义:

这一行第一个colib是必须的(别问我为什么),然后后面是代码自带的example,的可以删掉或者用#注释掉。然后把new写到一行的后面。效果如图

然后往下翻,找到这么一串代码:

这些是自带的example们,可以删掉或注释掉。

后面加上两行:

new:new.o
    $(BUILDEXE) #注意,这一行第一个字符必须是<tab>键
#此处加一个回车

效果是这样的:

改完后保存退出。vim下按ESC键,然后输入英文冒号:wq回车

编译运行

第一次编译只需要输入make即可。然后我们就能看到一些提示信息

有warning可以忽略,只要没有error就好。

然后输入./new就可以运行:

效果跟预期相同。我们用协程完成了不同函数轮转运行。

注意

我们第二次make时会产生乱码各种错误,这是为什么呢?

我们在Makefile里面写的new文件会先编译new(可执行文件),如果new不存在的话寻找并编译new.cpp文件。我们在make之前要先把之前的new(可执行文件)删除掉才行(好吧,蒟蒻不知道怎么更优美地解决这个问题)。

第二次编译运行:

rm new
make
./new

我们接下来就可以愉快地使用libco写代码了。

 

  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 7
    评论
评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值