You need to enable JavaScript to run this app. 游戏引擎中getcwd返回构建路径而非源码路径,Eclipse正常VS Code异常如何解决
优惠活动
大模型
产品
解决方案
定价
更多

游戏引擎中getcwd返回构建路径而非源码路径,Eclipse正常VS Code异常如何解决

路径差异原因

你当前获取路径的逻辑使用getcwd()读取的是进程当前工作目录(CWD),并非可执行文件本身的存储路径,两个IDE的默认启动配置不同导致路径差异:

  • Eclipse默认将程序启动的工作目录设置为项目根目录(即../GlistApp/),拼接后路径符合预期
  • VS Code的C/C++插件默认将工作目录设置为可执行文件的输出目录(即../GlistApp/build/),因此拼接后的资源路径多了一层build目录

修复方案

最优方案:修改引擎路径获取逻辑

将获取工作目录的逻辑替换为获取可执行文件自身的存储路径,完全不依赖IDE的启动配置,适配所有运行场景:

#include <string>
#ifdef _WIN32
#include <windows.h>
#elif __APPLE__
#include <mach-o/dyld.h>
#elif __linux__
#include <unistd.h>
#endif

std::string gObject::exepath;
gObject::gObject() {
    char temp[1024]; // 扩大缓冲区避免长路径截断
#ifdef _WIN32
    GetModuleFileNameA(NULL, temp, sizeof(temp));
#elif __APPLE__
    uint32_t pathSize = sizeof(temp);
    _NSGetExecutablePath(temp, &pathSize);
#elif __linux__
    ssize_t pathLen = readlink("/proc/self/exe", temp, sizeof(temp)-1);
    if (pathLen != -1) temp[pathLen] = '\0';
#endif
    // 截取可执行文件所在的目录路径,去掉文件名
    std::string fullExePath = temp;
    size_t lastSplitPos = fullExePath.find_last_of("/\\");
    exepath = fullExePath.substr(0, lastSplitPos) + "/";
    // 统一替换反斜杠为正斜杠
    for (int i = 0; i < exepath.size(); i++) {
        if (exepath[i] == '\\') {
            exepath[i] = '/';
        }
    }
    // 开发阶段可执行文件在build目录时,加这行跳转到项目根目录,发布时注释或用编译宏控制
    // exepath += "../";
    // 也可通过编译宏自动适配开发/发布场景
    // #ifdef DEVELOPMENT_BUILD
    // exepath += "../";
    // #endif
}

临时方案:修改VS Code启动配置

如果不想改动引擎代码,可直接调整VS Code的运行配置对齐Eclipse行为:打开项目下.vscode/launch.json文件,找到cwd配置项,将值修改为"${workspaceFolder}"即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.13 19:39:00