【thrift】cygwin上编译安装thrift中的坑
2017-06-28 17:59
204 查看
下载了最新的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下面
在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下面
相关文章推荐
- Windows下Linux开发环境设置--安装Cygwin及交叉编译工具链
- cygwin的安装及编译和调试程序
- android学习——NDK入门 windows下安装cygwin 与 Eclipse使用CDT 自动编译
- cygwin下编译安装gcc 4.7.2
- Cygwin中编译安装MySQL
- Windows下Linux开发环境设置(二)--安装Cygwin及交叉编译工具链
- ubuntu thrift 编译安装
- thrift编译安装
- Cygwin1.7本地安装及编译
- 云凡教育分享-Flume-0.9.4源码编译依赖的thrift插件安装
- cygwin下boost编译安装
- android学习——NDK入门 windows下安装cygwin 与 Eclipse使用CDT 自动编译
- Thrift 学习笔记2——Windows环境下Thrift的安装、编译以及测试
- 关于win32移植android(最新的cocos2d-x安装错误和cygwin编译错误的解决)
- ubuntu下编译安装thrift
- [转载]Nginx源码学习之编译、构建与安装(cygwin环境)
- Thrift 学习笔记1——Ubuntu环境下Thrift的安装、编译以及测试
- 关于编译安装Thrift找不到libthriftnb.a的问题
- window上使用cygwin编译c及cygwin安装
- Android NDK编译之环境Cygwin 独立安装 make 离线包