Компилятор обнаруживает allegro.h, но не allegro_primitives.h - PullRequest
2 голосов
/ 02 января 2012

Когда я компилирую свою программу Allegro 5, используя g ++, она жалуется на undefined reference to 'al_init_primitives_addon', al_draw_filled_rectangle и другие подобные функции, которые можно найти в allegro_primitives.h. Он не жалуется на функции в allegro.h, такие как al_create_display.

Включает в себя:

#include <allegro5/allegro.h>

#include <allegro5/allegro_primitives.h>

#include "objects.h"

#include "main.h"

Команда компилятора:

g++ main.cpp -o game -lallegro -I/usr/include/allegro5 -L/usr/lib/allegro5

Жалобы:

/tmp/ccAyQlcl.o: In function `main':
main.cpp:(.text+0xef): undefined reference to `al_init_primitives_addon'
/tmp/ccAyQlcl.o: In function `Draw()':
main.cpp:(.text+0x38c): undefined reference to `al_draw_filled_rectangle'
main.cpp:(.text+0x415): undefined reference to `al_draw_filled_rectangle'

Кстати, MSVC ++ компилирует это нормально.

Ответы [ 2 ]

3 голосов
/ 02 января 2012

Вам необходимо связаться с allegro и allegro_primitives.Правильный путь:

g++ main.cpp -o game $(pkg-config --libs 
   allegro-5.0 allegro_main-5.0 allegro_primitives-5.0)

(все в одной строке, конечно.)

.pc файлы будут в /usr/local/lib/pkgconfig, который должен быть в вашей PKG_CONFIG_PATH средепеременная.

0 голосов
/ 02 января 2012

Ваш -lallegro не содержит этих функций. Если у вас есть старая библиотека в системных путях и нужная 5.x в /usr/lib/allegro5, вам нужно передать -L перед -l.

...