使用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
相关产品推荐
相关产品推荐

