Mac で SDL2 を介してファイルにアクセスすると、奇妙な問題が発生します。OS X Mountain Lion で XCode 4 を使用しており、フレームワークとして SDL2 を使用しています。ソースから SDL2 をコンパイルしていません。フレームワークをバンドルに追加し、ロードする必要のあるファイルも追加しました。プログラムは XCode から正常にビルドおよび実行されますが、ファイルはエディターの外部ではロードされません (IE でスタンドアロンの .app をダブルクリックしても、ファイルはロードされません)。私の .app パッケージは次のようになります。
MyApp.app/
Contents/
Frameworks/
SDL2.framework/
MacOS/
MyApp
Resources/
Configure.txt
MyBMP.bmp
Info.plist
PkgInfo
私のCコードでは、これを試みました:
SDL_LoadBMP("MyApp.app/Contents/Resources/MyBMP.bmp");
これだけでなく:
SDL_LoadBMP("MyBMP.bmp");
そして、その間の事実上すべて。また、次の方法でテキストファイルにアクセスしようとしました:
FILE* data = fopen("MyApp.app/Contents/Resources/Configure.txt", "r");
と
FILE* data = fopen("Configure.txt", "r");
成功しませんでした。XCode エディター内では、長い絶対パスのみが機能しますが、私が試したものはスタンドアロンの .app では機能しませんでした。
他のユーザーはこの問題に遭遇していますか? SDL 1.2 を使用していたときにファイルをロードしていましたが、何らかの理由で SDL2 では何もロードされないようです。SDL2 は、初期化中に Active Directory で奇妙なことをしますか?
-------------EDIT 1-------------- 何が起こっているのかを把握するための私の最近の試みは、このコードを使用しました:
#include "SDL2/SDL.h"
#include "stdio.h"
#include "stdlib.h"
int main (int argc, char** argv){
if(SDL_Init(SDL_INIT_EVERYTHING) < 0)
return EXIT_FAILURE;
FILE* test = fopen("Test.txt", "w");
if (!test)
return EXIT_FAILURE;
fprintf(test, "Let's see where this ends up...");
fclose(test);
return EXIT_SUCCESS;
//The rest of my code, which shouldn't ever come into play...
}
XCode 4 エディターから実行すると、これは期待どおりに機能します。Debug フォルダの .app ファイルのすぐ隣に、「これがどこで終わるか見てみましょう...」というフレーズを含む Test.txt ファイルがあります。ただし、スタンドアロン アプリをクリックして実行すると、プログラムはすぐに終了し、テキスト ファイルは見つかりません。ログを確認したところ、プログラムがコード 1 で終了したとだけ書かれています。より詳細な分析により、fopen()
失敗しているようです。誰が何が起こっているのかについて考えを持っていますか?