【一】编译出错
【问题描述】
In file included from /home/jockeyyan/git-repository/QuestionAnsweringBot/AnyQ/build/third_party/paddle/src/extern_paddle/paddle/fluid/framework/channel.h:291:0,
from /home/jockeyyan/git-repository/QuestionAnsweringBot/AnyQ/build/third_party/paddle/src/extern_paddle/paddle/fluid/operators/channel_create_op.cc:15:
/home/jockeyyan/git-repository/QuestionAnsweringBot/AnyQ/build/third_party/paddle/src/extern_paddle/paddle/fluid/framework/channel_impl.h:69:32: error: ‘recursive_mutex’ is not a member of ‘std’
void Wait(std::unique_lockstd::recursive_mutex &lock) {
^~~
/home/jockeyyan/git-repository/QuestionAnsweringBot/AnyQ/build/third_party/paddle/src/extern_paddle/paddle/fluid/framework/channel_impl.h:69:32: error: ‘recursive_mutex’ is not a member of ‘std’
/home/jockeyyan/git-repository/QuestionAnsweringBot/AnyQ/build/third_party/paddle/src/extern_paddle/paddle/fluid/framework/channel_impl.h:69:52: error: template argument 1 is invalid
void Wait(std::unique_lockstd::recursive_mutex &lock) {
^
/home/jockeyyan/git-repository/QuestionAnsweringBot/AnyQ/build/third_party/paddle/src/extern_paddle/paddle/fluid/framework/channel_impl.h:106:8: error: ‘recursive_mutex’ in namespace ‘std’ does not name a type
std::recursive_mutex mu_;
^~~~~~~~~~~~~~~
In file included from /home/jockeyyan/git-repository/QuestionAnsweringBot/AnyQ/build/third_party/paddle/src/extern_paddle/paddle/fluid/framework/channel.h:291:0,
from /home/jockeyyan/git-repository/QuestionAnsweringBot/AnyQ/build/third_party/paddle/src/extern_paddle/paddle/fluid/operators/channel_create_op.cc:15:
/home/jockeyyan/git-repository/QuestionAnsweringBot/AnyQ/build/third_party/paddle/src/extern_paddle/paddle/fluid/framework/channel_impl.h: In member function ‘virtual bool paddle::framework::ChannelImpl::CanSend()’:
/home/jockeyyan/git-repository/QuestionAnsweringBot/AnyQ/build/third_party/paddle/src/extern_paddle/paddle/fluid/framework/channel_impl.h:124:19: error: ‘recursive_mutex’ is not a member of ‘std’
std::lock_guardstd::recursive_mutex lock{mu_};
【解决方案】
在 AnyQ/build/third_party/paddle/src/extern_paddle/paddle/fluid/framework/channel_impl.h 文件里加了一行头文件,编译通过了。
#include <mutex>
【二】编译出错
【问题描述】
[ 17%] Built target proto_build
[ 21%] Built target extern_eigen
[ 25%] Built target extern_gtest
[ 30%] Built target extern_gflags
[ 35%] Built target extern_openssl
[ 39%] Built target extern_glog
[ 43%] Built target extern_leveldb
[ 47%] Built target extern_brpc
[ 52%] Built target extern_curl
[ 53%] Performing build step for 'extern_paddle'
[ 1%] Built target extern_eigen3
[ 1%] Built target extern_gflags
[ 2%] Built target extern_threadpool
[ 5%] Built target extern_boost
[ 3%] Built target extern_snappy
[ 3%] Built target extern_zlib
[ 3%] Built target extern_mklml
[ 4%] Built target swig
[ 6%] Built target extern_warpctc
[ 7%] Built target extern_lib_any
[ 7%] Built target framework_py_proto_init
[ 7%] Built target profiler_py_proto_init
paddle/fluid/framework/CMakeFiles/framework_py_proto.dir/build.make:60: *** target pattern contains no '%'. Stop.
CMakeFiles/Makefile2:2402: recipe for target 'paddle/fluid/framework/CMakeFiles/framework_py_proto.dir/all' failed
make[4]: *** [paddle/fluid/framework/CMakeFiles/framework_py_proto.dir/all] Error 2
make[4]: *** Waiting for unfinished jobs....
paddle/fluid/platform/CMakeFiles/profiler_py_proto.dir/build.make:60: *** target pattern contains no '%'. Stop.
CMakeFiles/Makefile2:1751: recipe for target 'paddle/fluid/platform/CMakeFiles/profiler_py_proto.dir/all' failed
make[4]: *** [paddle/fluid/platform/CMakeFiles/profiler_py_proto.dir/all] Error 2
[ 8%] Built target extern_glog
[ 8%] Built target extern_snappystream
[ 9%] Built target extern_protobuf
Makefile:105: recipe for target 'all' failed
make[3]: *** [all] Error 2
CMakeFiles/extern_paddle.dir/build.make:111: recipe for target 'third_party/paddle/src/extern_paddle-stamp/extern_paddle-build' failed
make[2]: *** [third_party/paddle/src/extern_paddle-stamp/extern_paddle-build] Error 2
CMakeFiles/Makefile2:857: recipe for target 'CMakeFiles/extern_paddle.dir/all' failed
make[1]: *** [CMakeFiles/extern_paddle.dir/all] Error 2
Makefile:83: recipe for target 'all' failed
make: *** [all] Error 2
【解决方案】
这个错误是跟cmake版本有关系,我改成cmake 3.2.2 就不会报错了。