现象
在ubuntu18.04上编译好的代码,拉到centos7上编译时,报错如下:

是zmq.hpp报的错,已经使用-std=c++11选项。
使用zmq库的是libzmq_4.3.2,zmq.hpp来自cppzmq,它是在libzmq上做了一层c++的封装。
定位
网上查了一下,有说是GCC版本太低导致的。
从ubuntu18.04到centos7,gcc的版本也由7.5.0下降到了4.8.5。
有可能就试一下,升级gcc,注意,不建议这样操作,因为一旦升级了gcc,原来在该服务器上编译的代码可能都要重新编译一遍了。
所以在一台新机器上尝试,无果。因为这时发现了问题所在。
原来cppzmq库虽然是header-only的,但是需要编译才能使用。
其实解决方案是只需要在centos上重新编译一下。
解决
删除代码仓库中zmq.hpp(它会因不同机器而不同,不应该放在源码库中)。
下载cppzmq,编译:
cd cppzmq-4.7.1/
mkdir build
cd build
cmake ..
make -j4 install
这里cmake时又报错:Unknown CMake command "catch_discover_tests"。
解决方法是关闭test:cmake -DCPPZMQ_BUILD_TESTS=OFF …
结果如下:

本文讲述了在从Ubuntu 18.04迁移到CentOS 7时,开发者在编译cppzmq遇到的zmq.hpp错误,涉及GCC版本降低、header-only库编译需求及解决步骤,强调了代码仓库管理和环境依赖的重要性。

908

被折叠的 条评论
为什么被折叠?



