Allegro в Ubuntu: неопределенная ссылка на al_install_system

Сегодня я попытался установить библиотеку Allegro. У меня такой же опыт в C++, но, похоже, у меня нет такого опыта. Я скомпилировал Allegro 5.0 из исходников и поместил его в /usr/lib/gcc/i486-linux-gnu/4.4/include/allegro5. Но когда я пытаюсь скомпилировать свой код, появляется следующее:

    > g++ test2.cc -o test2
/home/chris/Desktop/c++/test2/.objs/main.o||In function `main':|
main.cpp:(.text+0x22)||undefined reference to `al_install_system'|
main.cpp:(.text+0x3e)||undefined reference to `al_create_display'|
main.cpp:(.text+0x6b)||undefined reference to `al_map_rgb'|
main.cpp:(.text+0x8e)||undefined reference to `al_clear_to_color'|
main.cpp:(.text+0x93)||undefined reference to `al_flip_display'|
main.cpp:(.text+0xa1)||undefined reference to `al_rest'|
main.cpp:(.text+0xa9)||undefined reference to `al_destroy_display'|
||=== Build finished: 7 errors, 0 warnings ===|

Код, который я использую:

#include <stdio.h>
#include <allegro5/allegro.h>

int main(int argc, char **argv)
{
   ALLEGRO_DISPLAY *display = NULL;

   if(!al_init()) {
      fprintf(stderr, "failed to initialize allegro!\n");
      return -1;
   }

   display = al_create_display(640, 480);
   if(!display) {
      fprintf(stderr, "failed to create display!\n");
      return -1;
   }

   al_clear_to_color(al_map_rgb(0,0,0));
   al_flip_display();
   al_rest(10.0);
   al_destroy_display(display);
   return 0;
}

allegro-config --libs ничего не возвращает. Сначала у меня был пакет Allegro, но он тоже не работал.


person Suyooo    schedule 07.03.2011    source источник
comment
/usr/lib/gcc/i486-linux-gnu/4.4/include/allegro5 — неподходящее место для размещения включаемых файлов библиотеки.   -  person milan    schedule 09.03.2011
comment
возможный дубликат компиляции кода C++ с помощью allegro 5 и g++.   -  person karlphillip    schedule 17.06.2011


Ответы (2)


Вам нужно связать библиотеки Allegro, но вы, похоже, этого не делаете.

allegro-config --libs ничего не возвращает.

Это часть вашей проблемы. Обычно вы должны иметь возможность добавить его в свою командную строку, например:

g++ `allegro-config --libs` test2.cc -o test2

В моей системе (Ubuntu 10.10) это дает следующее:

$ allegro-config --libs
-L/usr/lib -Wl,-Bsymbolic-functions -lalleg-4.2.2

Вы вызываете правильное allegro-config? Может стоит указать полный путь к нему?

person Thomas    schedule 07.03.2011
comment
Как я уже сказал, я не устанавливал Allegro пакетами, а скомпилировал его из исходников. Когда я установил пакет, он вернул то, что вы написали выше. Должен ли я попробовать удалить Allegro5 и снова установить пакеты, или это ничего не изменит? - person Suyooo; 07.03.2011
comment
Повторяю два вопроса выше. - person Thomas; 07.03.2011
comment
Ничего, я имел в виду, что он не установлен, извините, если это было неясно. Я попытался переустановить пакеты (liballegro-4.2, liballegro-4.2-dev). Команда теперь выводит то же, что и на вашей Ubuntu, и вызов права по-прежнему приводит к тому же выводу, что и в OP. - person Suyooo; 07.03.2011
comment
Пакеты Ubuntu дают вам Allegro 4, который даже не должен позволять вам компилировать код из OP, не говоря уже о его связывании. В любом случае, вы также можете вручную добавить -L/path/to/your/allegro/libs -lalleg или что-то в этом роде. - person Thomas; 07.03.2011
comment
О, ха-ха, кажется, я тупой :I Код Allegro 4 работает нормально - если Allegro 5 еще не работает, я просто начну с этого. Спасибо, что справились с моей глупостью :p - person Suyooo; 07.03.2011
comment
@Suyo, Allegro 5 работает нормально. Обратите внимание, что это полностью переписанная версия 4, и процесс сборки также отличается. - person Matthew; 09.03.2011
comment
Я думаю, что настоящий ответ здесь: код с аллегро 5 и g">stackoverflow.com/questions/6377204/ - person karlphillip; 17.06.2011

Allegro 5 использует pkg-config.

gcc foo.c -o foo $(pkg-config --libs allegro-5.0)

Вам также нужно будет указать библиотеки дополнений, которые вы используете:

gcc foo.c -o foo $(pkg-config --libs allegro-5.0 allegro_image-5.0)
person Matthew    schedule 08.03.2011
comment
После запуска 'pkg-config --list-all | grep allegro», я понял, что мне нужно опустить нулевую точку, чтобы команда работала для меня: «gcc allegro_play.c -o play $(pkg-config --libs allegro-5)» - person HappyCoder86; 06.11.2015