Ошибки компиляции Allegro 5.2

Я пытался работать с Allegro версии 5.2, но по какой-то причине я не могу скомпилировать его в своей системе (под управлением 64-разрядной версии Windows 10) с помощью MinGW.

Мои настройки компоновщика

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

src\game.c|13|undefined reference to `al_clear_to_color'|

Эта функция должна присутствовать, насколько я знаю.

Я очень ценю любую помощь :)

Вот пример кода, который не компилируется

#include"../include/init.h"

#include "allegro5/allegro5.h"
#include"allegro5/allegro_audio.h"
#include"allegro5/allegro_acodec.h"
#include<stdio.h>
#include<stdlib.h>

const float fps = 30;
const int width = 256;
const int height = 240;

int init() {
    running = 1;

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

    timer = al_create_timer(1.0 / fps);
    if(!timer) {
        fprintf(stderr, "failed to create timer!\n");
        return -1;
    }

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

    event_queue = al_create_event_queue();
    if(!event_queue) {
        fprintf(stderr, "failed to create event_queue!\n");
        return -1;
    }

    /*if(!al_install_audio()){
        fprintf(stderr, "failed to initialize audio!\n");
        return -1;
    }

    if(!al_install_keyboard()) {
        fprintf(stderr, "failed to initialize the keyboard!\n");
        return -1;
    }

    if(!al_init_acodec_addon()){
        fprintf(stderr, "failed to initialize audio codecs!\n");
        return -1;
    }

    if (!al_reserve_samples(1)){
        fprintf(stderr, "failed to reserve samples!\n");
        return -1;
    }*/

    if(!al_init_primitives_addon()) {
        fprintf(stderr, "failed to create primitives addon");
        return -1;
    }


    al_register_event_source(event_queue, al_get_display_event_source(display));

    // register timer event for max fps
    al_register_event_source(event_queue, al_get_timer_event_source(timer));
    //al_register_event_source(event_queue, al_get_keyboard_event_source());

    al_clear_to_color(al_map_rgb(0,0,0));

    al_flip_display();

    al_start_timer(timer);

    return 1;
}

person unlink    schedule 28.06.2016    source источник
comment
Ну, я действительно не понимаю, почему код не компилируется, вы можете попробовать спросить разработчиков напрямую на форумах allegro.cc. Обычно им нравится помогать новым пользователям :)   -  person rlam12    schedule 03.07.2016
comment
Кажется, хорошая идея :) Спасибо   -  person unlink    schedule 04.07.2016


Ответы (3)


Используете ли функцию al_map_rgb_f() для отображения цвета, например: al_clear_to_color(al_map_rgb(255, 255, 255));?

Можете ли вы вставить свой код здесь?

Извините, это не должен быть ответ, пока у меня нет репутации, чтобы комментировать его.

person Aipi    schedule 28.06.2016
comment
Да, я добавил пример кода в качестве редактирования основного вопроса. - person unlink; 29.06.2016

Я вижу в ваших настройках компоновщика, что вы связываете монолитную версию и все модули отдельно. В монолитной версии все остальные модули объединены в один, поэтому вам не нужны только все остальные библиотеки allegro_*. Может там конфликт? Кроме этого, проверьте журнал и проверьте, связана ли проблема как с отладкой, так и с выпуском.

person kraxie    schedule 01.11.2016
comment
Это может быть лучше в качестве комментария - person mhatch; 01.11.2016

Ваши настройки компоновщика все испорчены. Вы смешиваете как динамические, так и статические библиотеки, а также монолитные и немонолитные библиотеки.

Библиотеки, оканчивающиеся на .dll.a, являются импортируемыми архивами. Библиотеки, оканчивающиеся только на .a, являются архивами статических библиотек. Когда вы ссылаетесь на монолит динамического аллегро, вам не нужно ссылаться ни на что другое.

Когда вы связываетесь со статическими библиотеками allegro, вы также должны связывать их зависимости.

Кроме того, я обычно не рекомендую использовать панель «библиотеки ссылок» в настройках компоновщика проекта Code Blocks. Вместо этого установите компоновщик, включая каталоги и параметры компоновщика. Это позволяет вам изменить каталог ссылок по желанию, не меняя никаких параметров ссылки на библиотеку. Таким образом, вы можете по своему желанию обновить аллегро и другие библиотеки. В противном случае вам придется удалить и заново добавить все библиотеки ссылок.

person BugSquasher    schedule 22.03.2019