【thrift】cygwin上编译安装thrift中的坑

本文介绍了如何在Cygwin环境下成功编译C++版本的Thrift 0.10.0,包括所需依赖库的安装、解决编译过程中的常见问题,以及对特定源文件的修改等细节。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

下载了最新的thrift,版本为0.10.0

在cygwin只编译c++版本的thrift

在cygwin上装了 

5.4.0-1 cygwin64-gcc-core

5.4.0-1 cygwin64-gcc-g++

5.4.0-1 gcc-core

5.4.0-1 gcc-g++

5.4.0-4 mingw64-i686-gcc-core

5.4.0-4 mingw64-i686-gcc-g++

5.4.0-3 mingw64-x86_64-gcc-core

5.4.0-3 mingw64-x86_64-gcc-g++

1.63.0-1 boost c++ libraries

1.63.0-1 libboost-devel

1.60.0-2 mingw64-i686-boost

1.60.0-2 mingw64-x86_64-boost

flex

bison

libtool

这些库,然后./configure ,开始make,如果configure需要一些特定的配置,可以查看README.md文件

==============================坑 坑 坑 坑========================================

这里是坑:

1. 任何标准库出现问题的时候比如找不到某个函数的定义,把对应层级的Makefile中的-std=c++11 改成 -std=gun++11

2. 任何标准库出现问题的时候比如找不到某个函数的定义,在对应层级的Makefile中加上 -D_GNU_SOURCE

3. 在TOutput.cpp文件中,需要把strerror_r()的返回值改成char *,这是GNUC版本的一个特殊之处,相应的代码:

#else
  char* b_error = b_errbuf;
  int rv = strerror_r(errno_copy, b_errbuf, sizeof(b_errbuf));
  if (rv == -1) {
    // strerror_r failed.  omgwtfbbq.
    return "XSI-compliant strerror_r() failed with errno = "
           + boost::lexical_cast<std::string>(errno_copy);
  }
#endif

改成

#elif defined _GNU_SOURCE
  char* b_error = b_errbuf;
  char* rv = strerror_r(errno_copy, b_errbuf, sizeof(b_errbuf));
  if (rv == NULL) {
    // strerror_r failed.  omgwtfbbq.
    return "XSI-compliant strerror_r() failed with errno = "
           + boost::lexical_cast<std::string>(errno_copy);
  }
#else
  char* b_error = b_errbuf;
  int rv = strerror_r(errno_copy, b_errbuf, sizeof(b_errbuf));
  if (rv == -1) {
    // strerror_r failed.  omgwtfbbq.
    return "XSI-compliant strerror_r() failed with errno = "
           + boost::lexical_cast<std::string>(errno_copy);
  }
#endif

4. transport/THttpServer.cpp 碰到的strcasestr()找不到定义,参考第1条第2条;

5. concurrency/Mutex.cpp中,PTHREAD_MUTEX_RECURSIVE_NP是一个非GNUlibc中常见的宏,但是偏偏cygwin的GUNC没有,改成PTHREAD_MUTEX_RECURSIVE即可

6. make过程中可以把test目录所有内容都删了,不去编译test程序

7.不知道为何会进入到python目录下尝试调python,所以还要安装一下python。python2即可。

8. 默认的configure编译出来的是静态库a,以及la,如何编译出动态库的方法还没搞清楚,所以在应用程序中只能用静态链接的方式引入thrift

9. make install 某些模块会报错,不需要理会,c++的库都会被拷贝到/usr/local/lib下面




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值