Я разрабатываю игру в Allegro 5.0.8, и все шло хорошо, пока я не попытался скомпилировать ее и запустить в Linux (Mint 14)... поэтому я провел тесты Sime;
#include <allegro5/allegro.h>
#include <allegro5/allegro_image.h>
#include <iostream>
int main(void)
{
al_init();
ALLEGRO_DISPLAY *screen = al_create_display(800, 600);
al_init_image_addon();
ALLEGRO_PATH *path = al_get_standard_path(ALLEGRO_RESOURCES_PATH);
al_set_path_filename(path, "players.png");
ALLEGRO_BITMAP *img = al_load_bitmap(al_path_cstr(path, '/'));
if (img == NULL)
std::cout << al_path_cstr(path, '/') << std::endl;
al_draw_bitmap(img, 0, 0, 0);
al_flip_display();
while (true){}
return 0;
}
этот пример прекрасно компилируется, но строка
ALLEGRO_BITMAP *img = al_load_bitmap(al_path_cstr(path, '/'));
возвращает NULL. С другой стороны, линия
std::cout << al_path_cstr(path, '/') << std::endl;
печатает точный абсолютный путь изображения.
Что я делаю не так?
libpng
установлен? - person Some programmer dude   schedule 01.02.2013libpng
(т.е.-lpng
). - person Some programmer dude   schedule 01.02.2013pkg-config --libs allegro-5.0 allegro_image-5.0
... я также пробовал -libpng - person Sylar   schedule 01.02.2013allegro_error
, либо сerrno
. - person Some programmer dude   schedule 01.02.2013allegro_error
— это строка, которую вы можете распечатать напрямую, аerrno
— это целое число, но вы можете использоватьstrerror
, чтобы получить из него строку (например,strerror(errno)
). - person Some programmer dude   schedule 01.02.2013NULL
в функцию. Если указатель равенNULL
, не вызывайте функцию. Вы уже проверяете наличие ошибок в оператореif
, там также распечатываете возможные сообщения об ошибках, а затем выходите из программы (или делаете что-то еще). Но что бы вы ни делали, не используйте указательNULL
, кроме как для проверки, является ли онNULL
. - person Some programmer dude   schedule 01.02.2013