mac 安装 muduo

最近在看陈硕先生的muduo开源库,很实用的库,书里也有很多可学习的知识。推荐一下。陈硕的博客【http://blog.youkuaiyun.com/solstice】
muduo的安装依赖cmake,作者的主系统环境是linux,但是也提供了几个patch【http://en.wikipedia.org/wiki/Patch_(Unix)】的文件包含macos。
在没有patch diff的情况下mac编译muduo会有很多问题,不一一列举。
现在的muduo版本已经更新到了0.9.7【https://code.google.com/p/muduo/downloads/list】。但是尝试0.9.7 patch后的编译有很多问题:
mutex.h:
#ifdef CHECK_PTHREAD_RETURN_VALUE
#ifdef NDEBUG
__BEGIN_DECLS
extern void __assert_perror_fail (int errnum,
                                  const char *file,
                                  unsigned int line,
                                  const char *function)
    __THROW __attribute__ ((__noreturn__));
__END_DECLS
#endif
#define MCHECK(ret) ({ __typeof__ (ret) errnum = (ret);         \
                       if (__builtin_expect(errnum != 0, 0))    \
                         __assert_perror_fail (errnum, __FILE__, __LINE__, __func__);})
#else  // CHECK_PTHREAD_RETURN_VALUE
#define MCHECK(ret) ({ __typeof__ (ret) errnum = (ret);         \
                       assert(errnum == 0); (void) errnum;})
#endif // CHECK_PTHREAD_RETURN_VALUE

makefile :

 -DCHECK_PTHREAD_RETURN_VALUE

#set(CMAKE_CXX_COMPILER "g++")
set(CMAKE_CXX_COMPILER "clang++")
set(CMAKE_CXX_FLAGS_DEBUG "-O0")
#set(CMAKE_CXX_FLAGS_RELEASE "-O2 -finline-limit=1000 -DNDEBUG”)
set(CMAKE_CXX_FLAGS_RELEASE "-O2 -DNDEBUG")

编译会报错 : /Users/Kinly/Downloads/muduo/muduo-master/muduo/base/Condition.h:47:5: error: use of undeclared identifier '__assert_perror_fail'
    MCHECK(pthread_cond_broadcast(&pcond_));
    ^
/Users/Kinly/Downloads/muduo/muduo-master/muduo/base/Mutex.h:28:26: note: expanded from macro 'MCHECK'
                         __assert_perror_fail (errnum, __FILE__, __LINE__, __func__);})
本身是没有问题的,但是要修改编译条件。总感觉不妥。
后来邮件给陈硕先生咨询,换到0.9.4的版本,下面列出编译的问题及修改方案:
使用0.9.4版本,过程中出现过:


1、


[ 63%] Building CXX object examples/roundtrip/CMakeFiles/roundtrip_udp.dir/roundtrip_udp.cc.o


/Users/Kinly/Downloads/muduo-094/examples/roundtrip/roundtrip_udp.cc:20:47: error: use of undeclared identifier 'SOCK_NONBLOCK'


  int sockfd = ::socket(AF_INET, SOCK_DGRAM | SOCK_NONBLOCK | SOCK_CLOEXEC, IPPROTO_UDP);


                                              ^


/Users/Kinly/Downloads/muduo-094/examples/roundtrip/roundtrip_udp.cc:20:63: error: use of undeclared identifier 'SOCK_CLOEXEC'


  int sockfd = ::socket(AF_INET, SOCK_DGRAM | SOCK_NONBLOCK | SOCK_CLOEXEC, IPPROTO_UDP);






修改为:int sockfd = ::socket(AF_INET, SOCK_DGRAM, IPPROTO_UDP); 解决


2、


已经安装了protobuf,不过还是报了找不到lib文件的error


ld: library not found for -lprotobuf


clang: error: linker command failed with exit code 1 (use -v to see invocation)


make[2]: *** [bin/protobuf_client] Error 1


make[1]: *** [examples/protobuf/codec/CMakeFiles/protobuf_client.dir/all] Error 2


暂且注释掉了CMakeList里的 protobuf 相关内容

muduo是一个基于Linux的C++网络库,它专注于高性能和可伸缩性。根据引用,muduo是在Linux操作系统上开发和编译的。因此,它不支持Windows操作系统。 muduo使用了一些Linux特定的系统调用和功能,如timerfd和eventfd,这些功能在Windows中是不可用的。另外,muduo使用了一些Linux特定的库和工具链,如g++编译器和CMake构建系统。 引用提到muduo适用于IA32(英特尔32位体系架构)、FreeBSD和Darwin操作系统,分别是基于Intel的32位架构、类UNIX操作系统和苹果的操作系统。Windows操作系统并不在这个列表中。 综上所述,由于muduo的特定设计和依赖于Linux操作系统的功能,Windows操作系统不支持muduo。如果你正在使用Windows系统,并且需要一个类似的网络库,你可以考虑其他适用于Windows的替代品,如Boost.Asio。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *3* [muduo网络库:18---muduo简介之(muduo库的由来、编译安装、目录结构、代码结构、线程模型)](https://blog.youkuaiyun.com/qq_41453285/article/details/105104845)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] - *2* [muduo木铎学习(一)](https://blog.youkuaiyun.com/qq_36616692/article/details/88142811)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值