You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在64位Linux机器上用CMake构建32位mongo-c-driver?

解决64位Linux构建32位mongo-c-driver时链接错误问题

问题场景

在64位Linux机器上,使用-DCMAKE_TOOLCHAIN_FILE参数构建32位mongo-c-driver,已安装所有i386架构依赖包,但构建时出现链接错误:

/usr/bin/ld: /usr/lib/x86_64-linux-gnu/libssl.so: error adding symbols: file in wrong format
collect2: error: ld returned 1 exit status
gmake[2]: *** [src/libmongoc/CMakeFiles/mongoc_shared.dir/build.make:2012: src/libmongoc/libmongoc-1.0.so.0.0.0] Error 1
gmake[1]: *** [CMakeFiles/Makefile2:1566: src/libmongoc/CMakeFiles/mongoc_shared.dir/all] Error 2
gmake: *** [Makefile:171: all] Error 2

错误原因

CMake未正确识别i386架构的依赖库,仍在尝试链接64位版本的libssl.so。

解决步骤

1. 修正工具链文件

确保你的CMake工具链文件(比如toolchain-i386.cmake)包含以下关键配置,强制使用32位编译环境:

# 指定目标架构为32位
SET(CMAKE_SYSTEM_PROCESSOR i386)
SET(CMAKE_C_FLAGS "-m32" CACHE STRING "32-bit C flags")
SET(CMAKE_CXX_FLAGS "-m32" CACHE STRING "32-bit C++ flags")

# 优先查找i386架构的库
SET(CMAKE_FIND_ROOT_PATH_MODE_LIBRARY ONLY)
SET(CMAKE_LIBRARY_PATH /usr/lib/i386-linux-gnu)

# 指定32位编译器
SET(CMAKE_C_COMPILER gcc)
SET(CMAKE_CXX_COMPILER g++)

2. 手动指定OpenSSL依赖路径

在cmake命令中添加参数,明确指向i386版本的OpenSSL库:

cmake .. -DCMAKE_TOOLCHAIN_FILE=toolchain-i386.cmake \
  -DOPENSSL_ROOT_DIR=/usr/lib/i386-linux-gnu \
  -DOPENSSL_LIBRARIES=/usr/lib/i386-linux-gnu/libssl.so \
  -DOPENSSL_INCLUDE_DIR=/usr/include/i386-linux-gnu

3. 清理构建环境重新编译

清理之前生成的构建文件,避免缓存干扰:

rm -rf build && mkdir build && cd build
# 重新运行上述cmake命令,再执行编译
gmake

内容的提问来源于stack exchange,提问作者morioki

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.18 11:27:27