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

C++项目中如何跨平台获取其他项目文件的绝对路径?

跨平台获取图片资源目录解决方案

核心实现逻辑

通过系统接口直接获取当前可执行文件的绝对路径,再结合你给出的目录结构拼接出images文件夹路径,完全规避argv[0]不可靠的问题,不受进程工作目录影响。

工具函数实现

依赖C++17标准的std::filesystem处理路径,自动适配Windows/Linux的路径分隔符:

#ifdef _WIN32
#include <windows.h>
#else
#include <unistd.h>
#include <limits.h>
#endif
#include <filesystem>
#include <stdexcept>

namespace fs = std::filesystem;

// 获取当前可执行文件的绝对路径
fs::path get_executable_path() {
#ifdef _WIN32
    WCHAR path_buf[MAX_PATH] = {0};
    if (GetModuleFileNameW(NULL, path_buf, MAX_PATH) == 0) {
        throw std::runtime_error("获取可执行文件路径失败");
    }
    return fs::path(path_buf);
#else
    char path_buf[PATH_MAX] = {0};
    ssize_t read_len = readlink("/proc/self/exe", path_buf, sizeof(path_buf) - 1);
    if (read_len == -1) {
        throw std::runtime_error("获取可执行文件路径失败");
    }
    path_buf[read_len] = '\0';
    return fs::path(path_buf);
#endif
}

// 拼接得到images文件夹绝对路径
fs::path get_images_dir() {
    fs::path exe_path = get_executable_path();
    // 两次parent_path:第一次拿到bin目录,第二次拿到项目根目录(bin和images同级)
    fs::path project_root = exe_path.parent_path().parent_path();
    return project_root / "images";
}

构建配置适配

Linux CMake配置

在根目录的CMakeLists.txt中添加以下配置,确保可执行文件输出到项目根目录的bin文件夹,同时开启C++17支持:

set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${PROJECT_SOURCE_DIR}/bin)
set(CMAKE_CXX_STANDARD 17)
set(CMAKE_CXX_STANDARD_REQUIRED ON)

Windows Visual Studio配置

打开项目属性页,做全局配置(配置选「所有配置」,平台选「所有平台」):

  • 进入「配置属性 > 常规」,将「输出目录」修改为 $(SolutionDir)bin\
  • 进入「配置属性 > C/C++ > 语言」,将「C语言标准」修改为「ISO C17标准(/std:c++17)」或更高版本

部署说明

如果需要打包发布程序,只需要将images文件夹拷贝到和bin目录同级的安装路径下,上述路径逻辑无需修改即可正常运行。如果需要自定义系统级安装路径,可以通过编译宏传入安装前缀,分别适配开发调试和正式发布场景。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.28 16:27:02