编译器检测 allegro.h,但不检测 allegro_primitives.h

Compiler detects allegro.h, but not allegro_primitives.h

本文关键字:allegro 检测 primitives 编译器      更新时间:2023-10-16

当我使用 g++ 编译我的 Allegro 5 程序时,它抱怨 undefined reference to 'al_init_primitives_addon', al_draw_filled_rectangle 和 allegro_primitives.h 中的其他此类函数。它不会像 al_create_display 那样抱怨 allegro.h 中的功能。

包括:

#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++ 编译得很好。

您需要

与 allegro 和 allegro_primitives 链接。正确的方法是:

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

(当然,所有这些都在一行上。

.pc 文件将位于需要位于PKG_CONFIG_PATH环境变量中的/usr/local/lib/pkgconfig

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