примечание: это заключительное упражнение в книге Head First C.Allegro5 makefile error
У меня есть следующая проблема. Я пытаюсь сделать игру, используя библиотеки allegro5.2. Я хочу использовать несколько файлов .c, чтобы упорядочить все аккуратно. Однако у меня проблемы с компиляцией моих программ с использованием make-файла. Я пытаюсь скомпилировать эту простую программу:
#include <stdio.h>
#include <allegro5/allegro.h>
const int disp_h = 640;
const int disp_w = 480;
int main(int argc, char **argv) {
ALLEGRO_DISPLAY *display;
if(!al_init()) {
fprintf(stderr, "failed to initialize allegro!\n");
return -1;
}
display = al_create_display(disp_h,disp_w);
if(!display) {
fprintf(stderr, "failed to create display!\n");
return -1;
}
al_rest(0.4);
al_destroy_display(display);
printf("bye bye!!!\n");
return 0;
}
Makefile, является:
Blasteroids.o: allegro.h Blasteroids.c
gcc -Wall -c Blasteroids.c
Blasteroids: Blasteroids.o allegro.h
gcc -Wall -I/usr/include/allegro5 -L/usr/lib -lallegro -lallegro_main Blasteroids.o -o Blasteroids
Теперь, когда я использую терминал это компилируется нормально, но теперь я, кажется, есть проблема. Ошибка определяется с помощью терминала (с помощью команды сделать Blasteroids) является:
cc Blasteroids.o -o Blasteroids
Undefined symbols for architecture x86_64:
"_al_create_display", referenced from:
__al_mangled_main in Blasteroids.o
"_al_destroy_display", referenced from:
__al_mangled_main in Blasteroids.o
"_al_install_system", referenced from:
__al_mangled_main in Blasteroids.o
"_al_rest", referenced from:
__al_mangled_main in Blasteroids.o
"_main", referenced from:
implicit entry/start for main executable
(maybe you meant: __al_mangled_main)
ld: symbol(s) not found for architecture x86_64
clang: error: linker command failed with exit code 1 (use -v to see invocation)
make: *** [Blasteroids] Error 1
Я не знаю, что я делаю неправильно, и я очень новой для этих вещей. Я искал примеры в make-файлах, но они дают мне код, как я использую сейчас. Теперь я могу использовать только одну строку для вышеуказанной программы, но идея состоит в том, что я хочу создать свои собственные .c-файлы, сделать их в .o-файлы, а затем связать их вместе. Отсюда make-файл.
Я действительно сомневаюсь, что _exact_ же команда работает с терминалом. Вы должны переместить флаги библиотеки '-lallegro -lallegro_main' в конец линии ссылок после файлов' .o'. – MadScientist
Это действительно работает. Я получаю открытый экран на мгновение всякий раз, когда я запускаю программу – PJS
Я имею в виду, что команда связи не является выходной программой. В любом случае ваши библиотеки должны появляться после объектных файлов в линии ссылок. – MadScientist