可执行文件仅在终端 C Allegro 打开时有效
The executable only work when open by Terminal C Allegro
我有一个非常奇怪的问题,我正在开发一个 Allegro 游戏,我在终端上编译并在 XCode 代码查看器(它就像一个文本编辑器)上编写代码,一切都很顺利,但是当我通过单击加载图像和 运行 可执行文件,它给我错误 "Can't load image",有趣的事实是,当我通过终端 (./executablename) 打开可执行文件时,它完全按照它应该的方式工作!我真的不明白为什么,有人告诉我错误可能与权限有关,但我对mac不太了解......也不知道如何解决它。
这是我的代码:
#include <stdio.h>
//puxa a biblioteca allegro
#include <allegro5/allegro.h>
#include <allegro5/allegro_primitives.h>
#include <allegro5/allegro_image.h>
//fixo de tamanho de tela
#define LAR 1280
#define ALT 720
int main(int argc, char *argv[]){
//inicialização da janela
ALLEGRO_DISPLAY *janela = NULL;
ALLEGRO_BITMAP *imagem = NULL;
//inicia allegro, caso erro da a msg
if(!al_init()) {
fprintf(stderr, "failed to initialize allegro!\n");
return -1;
}
al_get_standard_path(ALLEGRO_RESOURCES_PATH);
//cria a janela
janela = al_create_display(LAR, ALT);
if(!janela) {
fprintf(stderr, "failed to create display!\n");
return -1;
}
//inicia primitivos
//al_init_primitives_addon();
//inicia a extenção de imagens
if(!al_init_image_addon()){
fprintf(stderr, "Falha ao carregar image addon");
}
//carrega imagem
imagem = al_load_bitmap("imagem.jpg");
if (!imagem){
fprintf(stderr, "Falha ao carregar imagem!\n");
return -1;
}
//preenche a tela com alguma cor
al_clear_to_color(al_map_rgb(0,0,0));
//desenha imagem
al_draw_bitmap(imagem, LAR/2 - (al_get_bitmap_width(imagem)/2),
ALT/2 - (al_get_bitmap_height(imagem)/2), 0);
//atualiza a tela
al_flip_display();
//pausa a execução
al_rest(10.0);
//destroi imagem
al_destroy_bitmap(imagem);
//destroi variavel janela
al_destroy_display(janela);
return 0;
}
我对 XCode 和 mac 都不熟悉,但是...这看起来像是我过去在 Visual Studio 中遇到的一个很常见的问题:
当您从调试器或在 IDE 的环境中执行程序时,IDE 从与二进制文件所在目录不同的目录启动程序(例如, project/solution 文件所在的位置)。因此,当您尝试定位图像时,它会失败,因为它不在文件夹中。
尝试将图像移动到该应用程序的项目文件附近或工作区中的其他目录中,直到它加载,或者在代码编辑器中修改环境变量,以便二进制文件的启动文件夹是您存储图像的文件夹.
我有一个非常奇怪的问题,我正在开发一个 Allegro 游戏,我在终端上编译并在 XCode 代码查看器(它就像一个文本编辑器)上编写代码,一切都很顺利,但是当我通过单击加载图像和 运行 可执行文件,它给我错误 "Can't load image",有趣的事实是,当我通过终端 (./executablename) 打开可执行文件时,它完全按照它应该的方式工作!我真的不明白为什么,有人告诉我错误可能与权限有关,但我对mac不太了解......也不知道如何解决它。
这是我的代码:
#include <stdio.h>
//puxa a biblioteca allegro
#include <allegro5/allegro.h>
#include <allegro5/allegro_primitives.h>
#include <allegro5/allegro_image.h>
//fixo de tamanho de tela
#define LAR 1280
#define ALT 720
int main(int argc, char *argv[]){
//inicialização da janela
ALLEGRO_DISPLAY *janela = NULL;
ALLEGRO_BITMAP *imagem = NULL;
//inicia allegro, caso erro da a msg
if(!al_init()) {
fprintf(stderr, "failed to initialize allegro!\n");
return -1;
}
al_get_standard_path(ALLEGRO_RESOURCES_PATH);
//cria a janela
janela = al_create_display(LAR, ALT);
if(!janela) {
fprintf(stderr, "failed to create display!\n");
return -1;
}
//inicia primitivos
//al_init_primitives_addon();
//inicia a extenção de imagens
if(!al_init_image_addon()){
fprintf(stderr, "Falha ao carregar image addon");
}
//carrega imagem
imagem = al_load_bitmap("imagem.jpg");
if (!imagem){
fprintf(stderr, "Falha ao carregar imagem!\n");
return -1;
}
//preenche a tela com alguma cor
al_clear_to_color(al_map_rgb(0,0,0));
//desenha imagem
al_draw_bitmap(imagem, LAR/2 - (al_get_bitmap_width(imagem)/2),
ALT/2 - (al_get_bitmap_height(imagem)/2), 0);
//atualiza a tela
al_flip_display();
//pausa a execução
al_rest(10.0);
//destroi imagem
al_destroy_bitmap(imagem);
//destroi variavel janela
al_destroy_display(janela);
return 0;
}
我对 XCode 和 mac 都不熟悉,但是...这看起来像是我过去在 Visual Studio 中遇到的一个很常见的问题:
当您从调试器或在 IDE 的环境中执行程序时,IDE 从与二进制文件所在目录不同的目录启动程序(例如, project/solution 文件所在的位置)。因此,当您尝试定位图像时,它会失败,因为它不在文件夹中。
尝试将图像移动到该应用程序的项目文件附近或工作区中的其他目录中,直到它加载,或者在代码编辑器中修改环境变量,以便二进制文件的启动文件夹是您存储图像的文件夹.