最近打算了解一下thrift框架的使用,在mac下,使用命令
brew install thrift
安装thrift。thrift版本为0.11.0,boost版本为1.67(此为一坑)。
安装完成后,参考网上的教程,编写了简单的thrift文件,使用命令
thrift -r --gen cpp ICalc.thrift
编译thrift文件,产生gen-cpp目录,其中有框架生成的cpp文件。
修改相关文件,然后在命令行下使用命令
g++ -g -Wall ICalc.h ICalc.cpp ICalc_constants.h ICalc_constants.cpp ICalc_types.h ICalc_types.cpp ICalc_server.skeleton.cpp
进行编译。
产生编译错误:
/usr/local/include/thrift/stdcxx.h:32:10: fatal error: 'boost/tr1/functional.hpp' file not found
#include <boost/tr1/functional.hpp>
google后(链接在此)发现:boost@1.67版本移除了tr1相关文件,导致编译错误。
解决办法为:安装boost@1.60版本,使用其中的tr1相关文件(此版本还未移除)。
brew install boost@1.60
- 可以直接将1.60版本/include/boost下的tr1文件夹直接复制到默认的库目录/usr/local/include/boost下
- 也可以手动指定链接库目录:使用g++参数-L/usr/local/opt/boost@1.60/lib以及-I/usr/local/opt/boost@1.60/include/
例如:
g++ -g -Wall -L/usr/local/opt/boost@1.60/lib -I/usr/local/opt/boost@1.60/include/ ICalc.h ICalc.cpp ICalc_constants.h ICalc_constants.cpp ICalc_types.h ICalc_types.cpp ICalc_server.skeleton.cpp
但此时依旧有编译错误:
ld: symbol(s) not found for architecture x86_64
clang: error: linker command failed with exit code 1 (use -v to see invocation)
解决办法为:添加参数-std=c++11 -lthrift
。
最后完整命令为
g++ -std=c++11 -g -Wall -lthrift ICalc.h ICalc.cpp ICalc_constants.h ICalc_constants.cpp ICalc_types.h ICalc_types.cpp ICalc_server.skeleton.cpp
————————————————
原文链接:https://blog.csdn.net/liaozelin_/article/details/80255636
网友评论