设为首页 加入收藏

TOP

基于Windows平台编译libmemcached的步骤 (二)
2014-11-23 23:36:37 来源: 作者: 【 】 浏览:42
Tags:基于 Windows 平台 编译 libmemcached 步骤
er), "-d -P %s -t 1 -p %u -U %u",

construct->pid_file[x], construct->port[x], construct->port[x]);

}

5. 将./libmemcached/options/server.h中的//#include 代码注释掉,因为win32中没有该文件。

6. 由于最初已经决定不编译测试用例,因此需要将./libtest/server.c文件中的部分代码注释掉,我这里的做法是将部分和linux相关的code使用如下方式注释掉:(注:不能将该文件全部注释掉,因为其他的测试文件需要依赖这里声明的函数,如果全部注释,将会导致其他的测试文件无法正常链接)

#ifndef WIN32

static struct timespec global_sleep_value= { .tv_sec= 0, .tv_nsec= 50000 };

#endif

static void kill_file(const char *file_buffer)

{

#ifndef WIN32

... ...

#endif

}

void server_startup(server_startup_st *construct)

{

#ifndef WIN32

... ...

#endif

}

7. 修改./libmemcached/options/目录下面的三个文件parser.cc, parser.h, scanner.cc,这3个文件中均包含ERROR,TRUE,FALSE 和FLOAT等4个枚举的成员,由于和win32中的相应的宏冲突了,结果导致无法编译通过,特别还会report与yacc和lex相关的错误,我这里的做法是在这3个文件中,将所有和这四个枚举相关的地方均改为ERROR1,TRUE1,FALSE1和FLOAT1。(注意大小写敏感)

//1. 该段代码位于parser.h

enum yytokentype {

COMMENT = 258,

END = 259,

ERROR1 = 260,

... ...

TRUE1 = 315,

FALSE1 = 316,

FLOAT1 = 317,

... ...

}

//2. 该段代码位于parser.cc

enum yytokentype {

COMMENT = 258,

END = 259,

ERROR1 = 260,

... ...

TRUE1 = 315,

FALSE1 = 316,

FLOAT1 = 317,

... ...

}

static const char *const yytname[] =

{

"$end", "error", "$undefined", "COMMENT", "END", "ERROR1",

... ...

"TRUE1", "FALSE1", "','", "'='", "FLOAT1", ... ..., 0

};

//3. 该段代码位于scanner.cc

case 44:

YY_RULE_SETUP

#line 133 "libmemcached/options/scanner.l"

{ yyextra->begin= yytext; return ERROR1; }

YY_BREAK

case 45:

YY_RULE_SETUP

#line 135 "libmemcached/options/scanner.l"

{ return TRUE1; }

YY_BREAK

case 46:

YY_RULE_SETUP

#line 136 "libmemcached/options/scanner.l"

{ return FALSE1; }

YY_BREAK

8. 注释掉./clients/memslap.c中的如下代码//#include ,因为该文件为linux中内存管理的文件,win32并未提供相应的文件,因此可以直接注释掉。

9. 最后修改./tests/parser.cc中和access相关的3个函数(access是linux中文件相关的函数),其中的#ifndef WIN32是新加的。

test_return_t memcached_create_with_options_with_filename(memcached_st*)

{

#ifndef WIN32

if (access(SUPPORT_EXAMPLE_CNF, R_OK))

return TEST_SKIPPED;

memcached_st *memc_ptr;

memc_ptr= memcached(STRING_WITH_LEN("--CONFIGURE-FILE=\"support/example.cnf\""));

test_true_got(memc_ptr, memcached_last_error_message(memc_ptr));

memcached_free(memc_ptr);

#endif

return TEST_SUCCESS;

}

test_return_t libmemcached_check_configuration_with_filename_test(memcached_st*)

{

#ifndef WIN32

if (access(SUPPORT_EXAMPLE_CNF, R_OK))

return TEST_SKIPPED;

memcached_return_t rc;

char buffer[BUFSIZ];

rc= libmemcached_check_configuration(STRING_WITH_LEN("--CONFIGURE-FILE=\"support/example.cnf\""), buffer, sizeof(buffer));

test_true_got(rc == MEMCACHED_SUCCESS, buffer);

rc= libmemcached_check_configuration(STRING_WITH_LEN("--CONFIGURE-FILE=support/example.cnf"), buffer, sizeof(buffer));

test_false_with(rc == MEMCACHED_SUCCESS, buffer);

rc= libmemcached_check_configuration(STRING_WITH_LEN("--CONFIGURE-FILE=\"bad-path/example.cnf\""), buffer, sizeof(buffer));

test_true_got(rc == MEMCACHED_ERRNO, buffer);

#endif

return TEST_SUCCESS;

}

test_ret

首页 上一页 1 2 3 下一页 尾页 2/3/3
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇一个字符串找查的例子 下一篇C语言移位

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容: