Muduo版本号: 1.0.8
错误1: 出现 ‘ld -lpthread not find’ 的错误, 原因是 boost库没有指定, 这个错误提示是最坑的, 错误提示完全不知道是什么意思.
解决方案: 在CMakeLists.txt中加入 boost库的头文件和库文件路径即可
set(BOOST_INCLUDEDIR "/export/newjpush/fuzheng/commonlibs/include")
set(BOOST_ROOT "/export/newjpush/fuzheng/commonlibs/lib")
错误2: 编译example/protobuf/rpc时候, 编译不过.
出现 NewCallBack not defined in the scope.
原因是protobuf库版本不兼容问题. 在机器上已经安装了protobuf, 头文件放在/usr/include 并且已安装的protobuf是 3.0.0
pb3和pb2的头文件不一样, muduo的rpc中使用的是应该是pb2, 导致编译o文件出错。
为了不影响现有的环境, 在不同的目录中安装了pb2
step1;set(Protobuf_INCLUDE_DIRS "/export/newjpush/fuzheng/commonlibs/include")
指定protobuf的头文件路径为新安装的pb2
修改之后, 以为万事大吉, 但是确出现 error显示 生成的pb文件版本跟头文件版本不匹配, 原因是CMake中使用了默认的protoc
step2: 把CMakefile.txt中的:
add_custom_command(OUTPUT rpc.pb.cc rpc.pb.h
COMMAND protoc
ARGS --cpp_out . ${CMAKE_CURRENT_SOURCE_DIR}/rpc.proto -I${CMAKE_CURRENT_SOURCE_DIR}
DEPENDS rpc.proto
VERBATIM )
修改为绝对路径
add_custom_command(OUTPUT rpc.pb.cc rpc.pb.h
COMMAND /export/newjpush/fuzheng/proto/bin/protoc
ARGS --cpp_out . ${CMAKE_CURRENT_SOURCE_DIR}/rpc.proto -I${CMAKE_CURRENT_SOURCE_DIR}
DEPENDS rpc.proto
VERBATIM )
最后, 又出现链接上的错误, 原因还是pb版本问题。修改方案是:
在CMakefile.txt中添加:
LINK_DIRECTORIES("/export/newjpush/fuzheng/proto/lib")
Note:
通过查看flags.make文件,可以查看cmake的CXX_FLAGS
注意: 修改CMakefiles.txt之后, 一定要把之前build文件夹全部删除,否则不会生效,