2016-03-09 12 views
1

У меня есть проект на C++, написанный в CodeBlocks, но я не знаю, как связать его с allegro5. Я хочу, чтобы люди могли компилировать мой проект без установки каких-либо библиотек или пакетов. Поэтому я помещаю каталог аллегро, загружаемый со своей веб-страницы в папку проекта. Затем я включил библиотекуКак связать библиотеку allegro5 с проектом C++

#include "allegro/include/allegro5/allegro5.h" 

Но когда я пытаюсь скомпилировать я получил ошибку

/home/stanek/ClionProjects/proj/guiMain.cpp:17: undefined reference to `al_install_system' 
/home/stanek/ClionProjects/proj/guiMain.cpp:22: undefined reference to `al_create_display' 
/home/stanek/ClionProjects/proj/guiMain.cpp:28: undefined reference to `al_map_rgb' 
/home/stanek/ClionProjects/proj/guiMain.cpp:28: undefined reference to `al_clear_to_color' 
/home/stanek/ClionProjects/proj/guiMain.cpp:30: undefined reference to `al_flip_display' 
/home/stanek/ClionProjects/proj/guiMain.cpp:32: undefined reference to `al_rest' 
/home/stanek/ClionProjects/proj/guiMain.cpp:34: undefined reference to `al_destroy_display' 

Это мой guiMain.cpp:

#include <iostream> 
#include "allegro/include/allegro5/allegro5.h" 


using namespace std; 

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(0,0,0)); 

    al_flip_display(); 

    al_rest(10.0); 

    al_destroy_display(display); 

    return 0; 
} 

И это мой CMakeList.txt

cmake_minimum_required(VERSION 3.3) 
project(proj) 

set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -g -Wall -std=c++11") 

set(SOURCE_FILES guiMain.cpp) 
add_executable(projids ${SOURCE_FILES}) 

UPDATE: Я изменил набор в моем CMakeList

set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -g -Wall -std=c++11 'pkg-config --cflags --libs allegro-5.0 '") 

, но я получил сообщение об ошибке:

Error:Configuration proj [Debug] 
Compiler exited with error code 1: /usr/bin/c++ -xc++ -g -Wall -std=c++11 'pkg-config --cflags --libs allegro-5.0 ' -g -v -dD -E 
c++: error: pkg-config --cflags --libs allegro-5.0 : No such file or directory 
Using built-in specs. 
COLLECT_GCC=/usr/bin/c++ 
Target: x86_64-unknown-linux-gnu 
Configured with: /build/gcc/src/gcc-5-20160209/configure --prefix=/usr --libdir=/usr/lib --libexecdir=/usr/lib --mandir=/usr/share/man --infodir=/usr/share/info --with-bugurl=https://bugs.archlinux.org/ --enable-languages=c,c++,ada,fortran,go,lto,objc,obj-c++ --enable-shared --enable-threads=posix --enable-libmpx --with-system-zlib --with-isl --enable-__cxa_atexit --disable-libunwind-exceptions --enable-clocale=gnu --disable-libstdcxx-pch --disable-libssp --enable-gnu-unique-object --enable-linker-build-id --enable-lto --enable-plugin --enable-install-libiberty --with-linker-hash-style=gnu --enable-gnu-indirect-function --disable-multilib --disable-werror --enable-checking=release 
Thread model: posix 
gcc version 5.3.0 (GCC) 

и

Error:Configuration proj [Release] 
Compiler exited with error code 1: /usr/bin/c++ -xc++ -g -Wall -std=c++11 'pkg-config --cflags --libs allegro-5.0 ' -O3 -DNDEBUG -v -dD -E 
c++: error: pkg-config --cflags --libs allegro-5.0 : No such file or directory 
Using built-in specs. 
COLLECT_GCC=/usr/bin/c++ 
Target: x86_64-unknown-linux-gnu 
Configured with: /build/gcc/src/gcc-5-20160209/configure --prefix=/usr --libdir=/usr/lib --libexecdir=/usr/lib --mandir=/usr/share/man --infodir=/usr/share/info --with-bugurl=https://bugs.archlinux.org/ --enable-languages=c,c++,ada,fortran,go,lto,objc,obj-c++ --enable-shared --enable-threads=posix --enable-libmpx --with-system-zlib --with-isl --enable-__cxa_atexit --disable-libunwind-exceptions --enable-clocale=gnu --disable-libstdcxx-pch --disable-libssp --enable-gnu-unique-object --enable-linker-build-id --enable-lto --enable-plugin --enable-install-libiberty --with-linker-hash-style=gnu --enable-gnu-indirect-function --disable-multilib --disable-werror --enable-checking=release 
Thread model: posix 
gcc version 5.3.0 (GCC) 
+1

_ «Я хочу, чтобы люди могли скомпилировать мой проект без установки каких-либо библиотек или пакетов». _ Это невозможно. –

+0

О, да, я должен установить аллегро на свой компьютер, и я хочу отправить свой проект моему лектору, тогда он должен также установить аллегро. – Mateusz

+0

Да, и вам также нужно связать библиотеку, чтобы избавиться от ошибок компоновщика. –

ответ

1

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

Один из подходов состоит в том, чтобы статически ссылался на ваш исполняемый файл для статических версий библиотек айро. . В викторине allegro есть tutorial о том, как это сделать с помощью кода :: Блоки.

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

Другой вариант - использовать динамическую привязку, но вместе с вашей игрой нужно добавить необходимые динамические библиотеки . Например, папки игры может выглядеть следующим образом:

bin/ 
    my_game.exe 
    liballegro.dll 
    liballegro_color.dll 
    ... 

Затем пользователь может связать с библиотеками вы предоставили, не заботясь о том, что установлен на их системе.

Обратите внимание, что динамические библиотеки обычно заканчиваются .so (Linux) или .dll (Windows), в то время как статические библиотеки заканчиваются .a.

Edit:

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

+0

ОК, спасибо. Но даже у меня есть установленный аллегро и включает в себя «#include ». У меня остались те же ошибки. – Mateusz

+1

, включая заголовки, недостаточно, вам нужно соединить с библиотекой. См. Ссылку выше или https://wiki.allegro.cc/index.php?title=Compiling_Allegro_Programs. – rcorre