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

使用RISC-V GNU工具链构建Googletest时getcwd/mkdir未定义引用求助

解决RISC-V裸机构建Googletest时getcwd/mkdir未定义的问题

针对你遇到的问题,核心是GTest中仍有依赖文件系统操作的代码路径未被禁用,你可以通过添加GTEST_HAS_FILE_SYSTEM=0编译定义来彻底规避这类问题,具体实现有两种方式:

方式1:在工具链文件中追加编译定义

直接在已有的add_compile_definitions中添加该宏:

add_compile_definitions(
  GTEST_HAS_POSIX_RE=0 
  GTEST_HAS_CLONE=0 
  GTEST_HAS_EXCEPTIONS=0 
  GTEST_HAS_TR1_TUPLE=0 
  GTEST_HAS_STREAM_REDIRECTION=0 
  GTEST_HAS_RTTI=0
  GTEST_HAS_FILE_SYSTEM=0  # 新增:禁用文件系统相关特性
)

方式2:通过FetchContent配置GTest的CMake变量

如果你想更贴合GTest自身的CMake配置逻辑,可以在FetchContent_MakeAvailable之前设置对应的缓存变量,强制GTest禁用文件系统支持:

FetchContent_Declare(
  googletest
  # 替换为你使用的GTest版本URL或Git仓库地址
  URL https://github.com/google/googletest/archive/refs/tags/v1.14.0.tar.gz
)

# 禁用文件系统相关功能
set(GTEST_HAS_FILE_SYSTEM OFF CACHE BOOL "" FORCE)
# 可选:如果你的裸机环境不支持线程,额外禁用pthread依赖
set(GTEST_HAS_PTHREAD OFF CACHE BOOL "" FORCE)

FetchContent_MakeAvailable(googletest)

原理说明

GTest的GTEST_HAS_FILE_SYSTEM宏是专门用于控制是否启用文件系统相关API调用的开关。当设为0时,GTest会跳过所有涉及文件系统的代码分支,包括getcwd(获取当前工作目录)和mkdir(创建目录)的调用,完美适配无文件系统的裸机环境。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.28 22:25:08