Arm64版本的centos编译muduo库遇到的问题的归纳

环境: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

编译提示找不到ProtobufCURL 库,那么就安装一下

bash 复制代码
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

最后终于编译成功了

相关推荐
靡不有初1116 分钟前
CCF-CSP第18次认证第一题——报数【两个与string相关的函数的使用】
c++·学习·ccfcsp
bugtraq20219 分钟前
XiaoMi Mi5(gemini) 刷入Ubuntu Touch 16.04——安卓手机刷入Linux
linux·运维·ubuntu
CodeWithMe1 小时前
[ Vim ] 常用命令 and 配置
linux·编辑器·vim
DC_BLOG1 小时前
Linux-GlusterFS进阶分布式卷
linux·运维·服务器·分布式
cookies_s_s2 小时前
Linux--进程(进程虚拟地址空间、页表、进程控制、实现简易shell)
linux·运维·服务器·数据结构·c++·算法·哈希算法
丁劲犇2 小时前
碳基生物的悲歌-DeepSeek思考实现Linux动态库递归收集工具
linux·递归·deepseek·ldd
不想编程小谭2 小时前
力扣LeetCode: 2506 统计相似字符串对的数目
c++·算法·leetcode
zhouwu_linux2 小时前
MT7628基于原厂的SDK包, 修改ra1网卡的MAC方法。
linux·运维·macos
2401_897930062 小时前
linux系统如何配置host.docker.internal
linux·docker·eureka
诶尔法Alpha3 小时前
Linux上使用dify构建RAG
linux·运维·服务器