2016-09-18 3 views
2

Я пытаюсь запустить очень простое графическое приложение на C++ с Eclipse (Neon): программа запускается, показывает красный дисплей и закрывается через 10 секунд.Eclipse GDT: неопределенная ссылка на компоненты библиотеки

Для этого я запускаю игровой движок Allegro 5.0.10, его исходный код устанавливает некоторые библиотеки внутри /usr/local/include/allegro5. Моя программа выглядит следующим образом:

#include <stdio.h> 
#include <allegro5/allegro.h> 
#include <allegro5/allegro5.h> 

int main(int argc, char **argv){ 

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

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

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

    al_flip_display(); 

    al_rest(10.0); 

    al_destroy_display(display); 

    return 0; 
} 

Создание нового проекта с нуля со следующими параметрами ...

New project options

... и строить его с этими людьми ...

C++ options.

Builder extra options.

... при выборе «Build All», появляется сообщение об ошибке в консоли:

make all 
Building file: ../main.cpp 
Invoking: GCC C++ Compiler 
g++ -O0 -g3 -Wall -c -fmessage-length=0 -fPIC -MMD -MP -MF"main.d" -MT"main.o" -o "main.o" "../main.cpp" 
Finished building: ../main.cpp 

Building target: pang 
Invoking: GCC C++ Linker 
g++ `pkg-config --libs allegro-5 allegro_image-5` -o "pang" ./main.o 
./main.o: In function `main': 
/home/xvlaze/workspace/pang/Debug/../main.cpp:14: undefined reference to `al_install_system' 
/home/xvlaze/workspace/pang/Debug/../main.cpp:19: undefined reference to `al_create_display' 
/home/xvlaze/workspace/pang/Debug/../main.cpp:25: undefined reference to `al_map_rgb' 
/home/xvlaze/workspace/pang/Debug/../main.cpp:25: undefined reference to `al_clear_to_color' 
/home/xvlaze/workspace/pang/Debug/../main.cpp:27: undefined reference to `al_flip_display' 
/home/xvlaze/workspace/pang/Debug/../main.cpp:29: undefined reference to `al_rest' 
/home/xvlaze/workspace/pang/Debug/../main.cpp:31: undefined reference to `al_destroy_display' 
collect2: error: ld returned 1 exit status 
make: *** [pang] Error 1 

EXTRA: Я уже воспроизведен this ответ, но он по-прежнему не работает.

+0

Можете ли вы поделиться с нами тем, что отображается на консоли сборки? Показывает, какая именно команда используется для запуска компилятора/etc и может указывать, где проблема. –

+0

@ JonahGraham Конечно! Также обновляйте w/дальнейший info :) – xvlaze

+0

Пожалуйста, подумайте над редактированием вопроса, чтобы задать только один вопрос. Первая часть вашего вопроса должна быть закрыта как «проблема, которая больше не может быть воспроизведена». Оставляя его там, он ставит вопрос о более низком качестве. –

ответ

0

Проблема, с которой вы столкнулись, заключается в том, что специальные флаги, которые вы добавили, приближаются к объекту, который зависит от них.

Что вы должны сделать, это изменить GCC C Linker ->командной строки шаблон иметь ${FLAGS} после ${INPUTS}.

Делать это изменит линию компиляции из:

g++ `pkg-config --libs allegro-5 allegro_image-5` -o "pang" ./main.o 

к:

g++ -o "pang" ./main.o `pkg-config --libs allegro-5 allegro_image-5` 

https://stackoverflow.com/a/409470/2796832 Смотрите на некоторую информацию о порядке ссылок и почему это важно.

+0

Если я удаляю backquotes из pkg-config, появляется сообщение об ошибке: 'make all Объект цели: libPong Вызов: GCC C++ Linker g ++ pkg-config --libs allegro-5 allegro_image-5 -shared -o" libPong "./pong.o g ++: error: pkg-config: Нет такого файла или каталога g ++: error: allegro-5: Нет такого файла или каталога g ++: error: allegro_image-5: Нет такого файла или каталога g ++: error: unrecognized command line option '--libs' make: *** [libPong] Ошибка 1' – xvlaze

+0

Не знаете, почему вы удалили обратные кавычки. Ознакомьтесь с настройками компоновщика C/C++ Linker -> Libraries. –

+0

Повторное чтение моего ответа. Думаю, я вижу, что вы сделали. Я попытался более подробно рассказать о той части, которую вы имели. –