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

Ubuntu 20.04下编译Realm C++ SDK失败,求解决方案

解决Ubuntu 20.04下Realm C++ SDK编译失败问题

问题场景

我在Ubuntu 20.04系统(gcc、g版本9.4.0)中,按官方文档用cmake安装Realm C SDK,从SDK文档页获取GIT_TAG后,CMakeLists.txt配置如下:

cmake_minimum_required(VERSION 3.15)
project(MyRealmCppProject)
set(CMAKE_CXX_STANDARD 17)
Include(FetchContent)
set(REALM_USE_SYSTEM_OPENSSL ON)
FetchContent_Declare(
  cpprealm
  GIT_REPOSITORY https://github.com/realm/realm-cpp.git
  GIT_TAG        5dab867db1e3ed63b1c4aba611991724d16cd0ce
)
FetchContent_MakeAvailable(cpprealm)
add_executable(myApp main.cpp)
target_link_libraries(myApp PRIVATE cpprealm)

cmake执行正常,但make时出现编译错误,核心问题包括:

  1. realm::notification_token的拷贝构造函数被删除,测试代码试图拷贝返回该对象
  2. int无法隐式转换为包含long int的std::variant,gcc 9对类型转换的校验更严格

错误原因

这些错误来自SDK自带的测试代码,而非SDK核心库代码。gcc 9.4.0对C++17特性的支持存在局限性,与SDK测试代码的写法兼容性不佳。

解决方案

方案1:跳过SDK测试代码编译

默认情况下,FetchContent会构建SDK的测试目标,直接关闭测试编译即可避免错误。修改后的CMakeLists.txt如下:

cmake_minimum_required(VERSION 3.15)
project(MyRealmCppProject)
set(CMAKE_CXX_STANDARD 17)
# 关闭测试编译
set(BUILD_TESTING OFF)
Include(FetchContent)
set(REALM_USE_SYSTEM_OPENSSL ON)
FetchContent_Declare(
  cpprealm
  GIT_REPOSITORY https://github.com/realm/realm-cpp.git
  GIT_TAG        5dab867db1e3ed63b1c4aba611991724d16cd0ce
)
FetchContent_MakeAvailable(cpprealm)
add_executable(myApp main.cpp)
target_link_libraries(myApp PRIVATE cpprealm)

方案2:升级gcc版本

Ubuntu 20.04可通过PPA安装更高版本的gcc(如11),新编译器对C++17特性的支持更完善,能兼容SDK测试代码:

sudo add-apt-repository ppa:ubuntu-toolchain-r/test
sudo apt update
sudo apt install gcc-11 g++-11
# 临时切换编译器环境变量
export CC=gcc-11
export CXX=g++-11
# 重新执行cmake和make
cmake ..
make

方案3:使用SDK稳定发布版本

改用官方发布的稳定版tag(而非文档页的临时哈希),正式版本的测试代码通常会修复兼容性问题。例如替换GIT_TAG为最新稳定版v1.12.0(可根据官方发布调整):

FetchContent_Declare(
  cpprealm
  GIT_REPOSITORY https://github.com/realm/realm-cpp.git
  GIT_TAG        v1.12.0
)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.20 03:07:04