Ubuntu下安装muduo网络库

Muduo是一个高性能的C++开源网络库,是一个基于Reactor模式的网络库,专为Linux平台下的并发非阻塞TCP网络编程设计。

muduo库是基于 boost 库开发的,所以需要在 Linux 平台上首先安装 boost 库。

1.boost库的安装

      sudo apt-get install libboost-all-dev

2.安装muduo库

  • 克隆muduo源码

     打开终端,使用Git命令从Muduo的GitHub仓库克隆源代码到本地

     git clone https://github.com/chenshuo/muduo

     cd muduo

  • 执行build.sh脚本的install选项来安装Muduo库。这个步骤通常会将Muduo的头文件和库文件安装到系统的某个目录下,以便在其他项目中使用。

      ./build.sh install

      cd ..

      ls    (会发现出现一个build文件夹)

  • 然而,需要注意的是,build.sh install命令可能并不会将Muduo的头文件和库文件安装到Linux的系统路径下(如/usr/include/usr/local/lib),而是安装到了Muduo源代码目录下的某个子目录中(如build/release-install-cpp11)。因此,需要将/build/release-install-cpp11下面的include和lib目录下的文件拷贝到系统目录下或者建立软链接。

       cd build/release-install-cpp11/include

       sudo  mv muduo/ /usr/include/

       cd ..

       cd lib

       sudo mv * /usr/local/lib/

   完成以后使用muduo库编写C++网络程序,不用在指定头文件和lib库文件路径信息了,因为g++会自动从/usr/include和/usr/local/lib路径下寻找所需要的文件。

  • 检查安装目录

     find /usr/include/muduo 

     如果找到,说明成功了,也可以自己用代码验证。

  • 后续利用muduo库时遇到的问题
add_library(mprpc SHARED ${SRC_LIST})
include_directories(/usr/include/muduo) 
target_link_libraries(mprpc /usr/local/lib/libmuduo_net.a /usr/local/lib/libmuduo_base.a pthread)

CMake链接muduo库时发生如下错误:

/usr/bin/ld: /usr/local/lib/libmuduo_net.a(EventLoop.cc.o): relocation R_X86_64_TPOFF32 against `_ZN12_GLOBAL__N_118t_loopInThisThreadE' can not be used when making a shared object; recompile with -fPIC /usr/bin/ld: /usr/local/lib/libmuduo_net.a(InetAddress.cc.o): relocation R_X86_64_TPOFF32 against `_ZL15t_resolveBuffer' can not be used when making a shared object; recompile with -fPIC /usr/bin/ld: /usr/local/lib/libmuduo_base.a(Logging.cc.o): relocation R_X86_64_TPOFF32 against symbol `_ZN5muduo10t_errnobufE' can not be used when making a shared object; recompile with -fPIC collect2: error: ld returned 1 exit status make[2]: *** [src/CMakeFiles/mprpc.dir/build.make:129:~/MPRPC/lib/libmprpc.so] 错误 1 make[1]: *** [CMakeFiles/Makefile2:131:src/CMakeFiles/mprpc.dir/all] 错误 2 make: *** [Makefile:91:all] 错误 2

错误原因:将 libmuduo_net.alibmuduo_base.a 这两个静态库链接到一个共享库(libmprpc.so)时,遇到了位置依赖性问题。即链接器(ld)发现这些静态库中的对象文件(.o)没有以位置无关代码(PIC)的形式编译。需要确保 libmuduo_netlibmuduo_base 这两个库在编译时使用了 -fPIC 选项。

解决办法:在/muduo/muduo/net/CMakeLists.txt中添加set_target_properties(muduo_net PROPERTIES COMPILE_FLAGS "-fPIC")。执行./build.sh编译完成后安装。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值