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时出现编译错误,核心问题包括:
realm::notification_token的拷贝构造函数被删除,测试代码试图拷贝返回该对象- 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
相关产品推荐
相关产品推荐

