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

MacOS下C++游戏执行上下文错误致资源加载失败求助

MacOS下C++游戏可执行文件资源加载失败问题

使用工具

  • JetBrains CLion IDE
  • C++ 17
  • CMake
  • raylib库

问题背景

我开发了一个用于学习C++的小型游戏,使用相对路径加载纹理资源(路径相对于可执行文件),在Windows平台运行正常,但MacOS下出现平台相关问题:通过CLion启动游戏时所有资源加载成功,但直接运行编译生成的可执行文件时,所有资源均加载失败。

资源路径代码

#include <map>
#include <string>

std::map<std::string, const char *> assetsPaths{{"worldMap", "../assets/worldMap.png"},
                                                {"knightIdle", "../assets/character/knight_idle_spritesheet.png"},
                                                {"knightRun", "../assets/character/knight_run_spritesheet.png"},
                                                {"goblinIdle", "../assets/enemy/goblin/goblin_idle_spritesheet.png"},
                                                {"goblinRun", "../assets/enemy/goblin/goblin_run_spritesheet.png"},
                                                {"rock", "../assets/obstacles/rock.png"},
                                                {"log", "../assets/obstacles/log.png"},
                                                {"sword", "../assets/weapon/sword/weapon_sword.png"}};

运行现象对比

IDE启动成功日志

INFO: FILEIO: [../assets/enemy/goblin/goblin_idle_spritesheet.png] File loaded successfully
INFO: IMAGE: Data loaded successfully (96x16 | R8G8B8A8 | 1 mipmaps)
INFO: TEXTURE: [ID 3] Texture loaded successfully (96x16 | R8G8B8A8 | 1 mipmaps)
INFO: FILEIO: [../assets/enemy/goblin/goblin_run_spritesheet.png] File loaded successfully
INFO: IMAGE: Data loaded successfully (96x16 | R8G8B8A8 | 1 mipmaps)
INFO: TEXTURE: [ID 4] Texture loaded successfully (96x16 | R8G8B8A8 | 1 mipmaps)
INFO: FILEIO: [../assets/character/knight_idle_spritesheet.png] File loaded successfully
INFO: IMAGE: Data loaded successfully (96x16 | R8G8B8A8 | 1 mipmaps)
INFO: TEXTURE: [ID 5] Texture loaded successfully (96x16 | R8G8B8A8 | 1 mipmaps)
INFO: FILEIO: [../assets/character/knight_run_spritesheet.png] File loaded successfully
INFO: IMAGE: Data loaded successfully (96x16 | R8G8B8A8 | 1 mipmaps)
INFO: TEXTURE: [ID 6] Texture loaded successfully (96x16 | R8G8B8A8 | 1 mipmaps)
INFO: FILEIO: [../assets/obstacles/log.png] File loaded successfully
INFO: IMAGE: Data loaded successfully (27x16 | R8G8B8A8 | 1 mipmaps)
INFO: TEXTURE: [ID 7] Texture loaded successfully (27x16 | R8G8B8A8 | 1 mipmaps)
INFO: FILEIO: [../assets/obstacles/rock.png] File loaded successfully
INFO: IMAGE: Data loaded successfully (22x21 | R8G8B8A8 | 1 mipmaps)
INFO: TEXTURE: [ID 8] Texture loaded successfully (22x21 | R8G8B8A8 | 1 mipmaps)
INFO: FILEIO: [../assets/weapon/sword/weapon_sword.png] File loaded successfully
INFO: IMAGE: Data loaded successfully (16x16 | R8G8B8A8 | 1 mipmaps)
INFO: TEXTURE: [ID 9] Texture loaded successfully (16x16 | R8G8B8A8 | 1 mipmaps)
INFO: FILEIO: [../assets/worldMap.png] File loaded successfully
INFO: IMAGE: Data loaded successfully (768x768 | R8G8B8A8 | 1 mipmaps)
INFO: TEXTURE: [ID 10] Texture loaded successfully (768x768 | R8G8B8A8 | 1 mipmaps)

直接运行可执行文件失败日志

WARNING: FILEIO: [../assets/enemy/goblin/goblin_idle_spritesheet.png] Failed to open file
WARNING: FILEIO: [../assets/enemy/goblin/goblin_run_spritesheet.png] Failed to open file
WARNING: FILEIO: [../assets/character/knight_idle_spritesheet.png] Failed to open file
WARNING: FILEIO: [../assets/character/knight_run_spritesheet.png] Failed to open file
WARNING: FILEIO: [../assets/obstacles/log.png] Failed to open file
WARNING: FILEIO: [../assets/obstacles/rock.png] Failed to open file
WARNING: FILEIO: [../assets/weapon/sword/weapon_sword.png] Failed to open file
WARNING: FILEIO: [../assets/worldMap.png] Failed to open file

排查结果

测试发现使用绝对路径可正常加载资源,但不利于跨设备使用。调用GetWorkingDirectory()获取工作目录:

std::cout << "Run path: " << GetWorkingDirectory() << std::endl;
  • IDE运行时工作目录:/Users/nickrimer/cpp/classy_clash_game/cmake-build-debug
  • 直接运行可执行文件时工作目录:/Users/nickrimer

可执行文件实际位于/Users/nickrimer/cpp/classy_clash_game/cmake-build-debug目录,但无论将可执行文件放在哪个文件夹,执行上下文始终指向用户根目录。

问题

如何让MacOS平台上的可执行文件以正确的执行上下文运行?如需更多构建信息,请告知。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.13 19:55:22