如何在Linux(CentOS 7)环境下通过CMAKE从源码构建32位GRPC二进制文件
CentOS 7 下 CMake 编译32位gRPC操作指南
一、前置依赖安装
先安装32位编译所需的基础依赖包,执行以下命令:
yum install -y glibc-devel.i686 libstdc++-devel.i686 zlib-devel.i686 gcc gcc-c++ make cmake
如果你的gRPC依赖其他第三方库,也需要对应安装其.i686后缀的32位版本。
二、需要传递的CMake编译标识
CMAKE_C_FLAGS:追加-m32参数,指定C语言编译为32位CMAKE_CXX_FLAGS:追加-m32参数,指定C++语言编译为32位CMAKE_ASM_FLAGS:追加-m32参数,指定汇编代码编译为32位- 可选
CMAKE_INSTALL_PREFIX:指定编译后文件的安装路径,避免覆盖系统默认的64位gRPC
三、具体编译操作步骤
- 进入gRPC源码目录,创建并进入32位编译专用目录,避免和64位编译产物混淆:
cd /path/to/grpc mkdir build_32 && cd build_32
- 执行cmake命令传入编译标识,你平时编译64位gRPC时添加的其他自定义参数可以直接加在末尾:
cmake .. \ -DCMAKE_C_FLAGS="-m32" \ -DCMAKE_CXX_FLAGS="-m32" \ -DCMAKE_ASM_FLAGS="-m32" \ -DCMAKE_INSTALL_PREFIX=/usr/local/grpc_32
- 执行编译和安装:
make -j$(nproc) make install
四、验证编译结果
执行以下命令确认生成的是32位二进制文件:
file /usr/local/grpc_32/bin/grpc_cpp_plugin
输出结果包含32-bit LSB executable字样即为编译成功。
注意事项
- 如果你使用外部依赖的protobuf、abseil等库,需要确保这些库也是32位版本,否则会出现链接错误,推荐编译时开启gRPC的
FETCHCONTENT_FULLY_DISCONNECTED=OFF参数,让其自动下载适配32位的依赖源码一同编译 - 若编译过程中出现头文件找不到的错误,优先检查对应依赖的32位版本是否已经安装
内容的提问来源于stack exchange,提问作者Roman Y. Andronov
相关产品推荐
相关产品推荐

