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

编译带Kerberos支持的Mongo C Driver时遇未定义引用错误求助

解决Mongo C Driver 1.10.3编译时的未定义引用问题(Ubuntu 16.04 + Kerberos支持)

从你贴出的错误日志来看,这些未定义引用主要分成两类:一类是OpenSSL新版本API的调用(比如OPENSSL_init_ssl、TLS_method),另一类是C++标准库的核心符号(比如operator new、std::__cxx11::basic_string相关)。结合你的Ubuntu 16.04环境,我给你整理了一套完整的解决步骤:

1. 补全系统依赖包

Ubuntu 16.04默认的依赖包可能不全,先执行下面的命令安装所有必需的编译依赖:

sudo apt-get update
sudo apt-get install -y build-essential cmake libssl-dev libkrb5-dev libsasl2-dev libcurl4-openssl-dev pkg-config

每个包的作用:

  • build-essential:补上gcc、g和C标准库,解决那些C++相关的未定义引用
  • libssl-dev:提供OpenSSL的头文件和静态库,修复OpenSSL API的链接问题
  • libkrb5-dev:开启Kerberos支持的核心依赖,必须安装
  • libsasl2-dev:可选但推荐,用来配合Kerberos实现SASL认证
  • libcurl4-openssl-dev:驱动内部HTTP功能需要的依赖

2. 调整CMake编译参数

你之前的命令没显式开启Kerberos,也没强制链接C++库,建议换成下面的CMake命令:

cmake -DENABLE_AUTOMATIC_INIT_AND_CLEANUP=OFF \
      -DENABLE_KERBEROS=ON \
      -DCMAKE_EXE_LINKER_FLAGS="-lstdc++" \
      ..

参数说明:

  • -DENABLE_KERBEROS=ON:明确告诉CMake要开启Kerberos支持,避免自动检测失败
  • -DCMAKE_EXE_LINKER_FLAGS="-lstdc++":强制链接C++标准库,解决那些std::__cxx11相关的符号缺失

如果你的系统里装了多个版本的OpenSSL(比如手动安装过高版本),可以再加个参数指定系统默认的OpenSSL路径,避免链接错误:

cmake -DENABLE_AUTOMATIC_INIT_AND_CLEANUP=OFF \
      -DENABLE_KERBEROS=ON \
      -DCMAKE_EXE_LINKER_FLAGS="-lstdc++" \
      -DCMAKE_PREFIX_PATH=/usr/lib/x86_64-linux-gnu/ \
      ..

3. 重新编译安装

先清理之前的编译残留,再编译安装:

make clean
make -j$(nproc)
sudo make install
  • make clean:清除上次编译生成的中间文件,避免缓存导致的问题
  • -j$(nproc):利用所有CPU核心编译,提升编译速度

这样应该就能解决你遇到的链接错误了。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.12 04:23:49