2

当我使用 g++ 编译我的 Allegro 5 程序时,它会抱怨undefined reference to 'al_init_primitives_addon', al_draw_filled_rectangleallegro_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++ 编译得很好。

4

2 回答 2

3

你需要链接 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环境变量中。

于 2012-01-02T18:08:46.923 回答
0

你的-lallegro不包含这些功能。如果您在系统路径中有一个旧库并且在 5.x 中有一个所需的库,则需要/usr/lib/allegro5通过-L之前的-l.

于 2012-01-02T06:57:25.323 回答