3

我正在尝试将一些图像加载到一个非常基本的基于 C++/SDL 的程序中。图像是使用加载的SDL_LoadBMP。我有图像加载,一切似乎都很完美。我的问题是图像是相对于我调用程序的位置加载的。

所以我有一个类似这样的目录结构。

project/
    src/
        source.cpp
    assets/
        image.bmp
    bin/
        program

当我从项目目录 ( ./bin/program) 执行程序时,它必须使用路径assets/image.bmp来加载图像。有什么方法可以使用相对路径,../assets/image.bmp以便可以从任何地方执行程序?

我想我需要一些东西来提供程序的绝对路径,然后我可以将路径附加到。

4

2 回答 2

3

在 Linux 上,/proc/self/exe是指向当前进程的可执行文件的符号链接。所以你可以用readlink它来找到它的路径。从那里您可以使用通常的路径操作来查找您的资源。也许您应该满足程序可执行文件再次成为二进制文件所在位置的符号链接的情况,即只要当前路径是符号链接,就进行更多的重新链接。

曾经有一个关于查找当前可执行文件路径的问题,没有/proc/self/exe它也询问了可移植接口,但在接受的答案中没有给出满足所有需求的单一解决方案。

于 2012-07-02T09:17:30.417 回答
2

在 Windows 中:

  1. GetModuleFileName(NULL, ...为您提供二进制文件的完整路径
  2. PathRemoveFileSpec(...只留下你的目录
  3. PathCombine(..., _T("..\\..\\image.bmp"))上面第 2 项的结果为您提供了完全合格的图像路径
于 2012-07-02T09:03:57.743 回答