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 に答える