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

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

博客一级目录

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

下载源代码

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

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

libco配置、编译 初体验 - 腾讯协程开源库_第1张图片

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

书写代码

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

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

#include "co_routine.h"

#include 
#include 
#include 
#include 
#include 

#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 

#ifdef __FreeBSD__
#include 
#include 
#include 
#endif

#include
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写到一行的后面。效果如图

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

libco配置、编译 初体验 - 腾讯协程开源库_第2张图片

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

后面加上两行:

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

效果是这样的:

libco配置、编译 初体验 - 腾讯协程开源库_第3张图片

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

编译运行

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

libco配置、编译 初体验 - 腾讯协程开源库_第4张图片

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

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

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

注意

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

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

第二次编译运行:

rm new
make
./new

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

 

你可能感兴趣的:(libco)