環境:Mac m2 pro下的VMware虛擬機中Arm64 centos
./build.sh 執行后提示如下
+ cmake -DCMAKE_BUILD_TYPE=release -DCMAKE_INSTALL_PREFIX=…/release-install-cpp11 -DCMAKE_EXPORT_COMPILE_COMMANDS=ON /root/package/muduo-master
– Boost version: 1.69.0
– Could NOT find Protobuf (missing: Protobuf_INCLUDE_DIR)
– Could NOT find CURL (missing: CURL_LIBRARY CURL_INCLUDE_DIR)
– found zlib
– CXX_FLAGS = -g -DCHECK_PTHREAD_RETURN_VALUE -D_FILE_OFFSET_BITS=64 -Wall -Wextra -Werror -Wconversion -Wno-unused-parameter -Wold-style-cast -Woverloaded-virtual -Wpointer-arith -Wshadow -Wwrite-strings -march=native -std=c++11 -rdynamic -O2 -DNDEBUG
– Configuring done
– Generating done
– Build files have been written to: /root/package/build/release-cpp11
+ make
[ 2%] Building CXX object muduo/base/CMakeFiles/muduo_base.dir/AsyncLogging.cc.o
/root/package/muduo-master/muduo/base/AsyncLogging.cc:1:0: 錯誤:unknown value
‘native’ for -march
// Use of this source code is governed by a BSD-style license
^
make[2]: *** [muduo/base/CMakeFiles/muduo_base.dir/AsyncLogging.cc.o] 錯誤 1
make[1]: *** [muduo/base/CMakeFiles/muduo_base.dir/all] 錯誤 2
make: *** [all] 錯誤 2
編譯提示找不到Protobuf
和CURL
庫,那么就安裝一下
sudo yum install protobuf protobuf-devel protobuf-compiler
sudo yum install libcurl-devel
第二處提示 unknown value ‘native’ for -march
注釋掉 CMakeList.txt
中的 -march=native
隨后編譯又提示如下錯誤
/root/package/muduo-master/muduo/base/LogStream.cc: 在成員函數‘void
muduo::LogStream::staticCheck()’中:
/root/package/muduo-master/muduo/base/LogStream.cc:228:3: 錯誤:static assertion failed: kMaxNumericSize is large enough
static_assert(kMaxNumericSize - 10 > std::numeric_limits::digits10,
^
make[2]: *** [muduo/base/CMakeFiles/muduo_base.dir/LogStream.cc.o] 錯誤 1
make[1]: *** [muduo/base/CMakeFiles/muduo_base.dir/all] 錯誤 2
make: *** [all] 錯誤 2
這是斷言錯誤,因為Arm架構下的centos 有 128bit 的 long double 類型
解決方法是將 package/muduo-master/muduo/base/LogStream.h
下的 kMaxNumericSize
設置為 std::numeric_limits<long double>::digits10 + 11
, 我這里檢查出 std::numeric_limits<long double>::digits10
為33, 則將其修改為44
還有有可能出現如下的編譯錯誤
deprecated: Please use ByteSizeLong() instead
在muduo庫的CMakeList中添加編譯選項
-Wno-deprecated-declarations
最后終于編譯成功了