2017-07-02 54 views
0

我想在克利翁使用Allegro5但我不能引用插件althought它可以找到頭和lib文件。問題引用Allegro5插件

我有庫「/ usr/lib目錄」和頭文件「/ usr/include目錄」,再說,我有在proyect目錄庫和頭文件。

我可以使用和編譯此:

[..] 
al_set_window_title(display, "title"); 
al_clear_to_color(al_map_rgb(4,0,90)); 
ALLEGRO_COLOR electric_blue = al_map_rgb(44, 117, 255); 

但我不能編譯這個(儘管檢測頭和funcion的):

#include <allegro5/allegro_primitives.h> 
[..] 
al_draw_line(100,500,300,500,electric_blue,6.0); 

這是錯誤:

Scanning dependencies of target project 
[ 9%] Building CXX object CMakeFiles/project.dir/main.cpp.o 
[ 18%] Linking CXX executable project 
CMakeFiles/project.dir/main.cpp.o: En la función `main': 
/home/lifka/Desktop/tetris/project/main.cpp:80: reference to `al_draw_line' undefined 
collect2: error: ld devolvió el estado de salida 1 
make[2]: *** [CMakeFiles/project.dir/build.make:329: project] Error 1 
make[1]: *** [CMakeFiles/Makefile2:68: CMakeFiles/project.dir/all] Error 2 
make: *** [Makefile:84: all] Error 2 

這是CMakeList.txt:

cmake_minimum_required(VERSION 3.7) 
project(project) 

set(CMAKE_CXX_STANDARD 11) 

set(SOURCE_FILES main.cpp [..]) 

SET(ALLEGRO_ROOT allegro/) 

INCLUDE_DIRECTORIES(${ALLEGRO_ROOT}/include) 
LINK_DIRECTORIES(/${ALLEGRO_ROOT}/lib) 

add_executable(project ${SOURCE_FILES}) 

TARGET_INCLUDE_DIRECTORIES(project PUBLIC ${ALLEGRO_ROOT}) 
TARGET_LINK_LIBRARIES(project allegro) 

這是項目結構: Project structure

我在做什麼錯?

回答

0

正如你可以在你的錯誤看到,參考你的main.cpp「al_draw_line」:80是不確定的。這是因爲Allegro有很多插件,如果您使用它們來使其工作,您也必須鏈接。

爲了解決這個問題,通過

TARGET_LINK_LIBRARIES(project 
         allegro_acodec 
         allegro_audio 
         allegro_color 
         allegro_dialog 
         allegro_image 
         allegro_main 
         allegro_memfile 
         allegro_physfs 
         allegro_primitives 
         allegro_ttf 
         allegro_font 
         allegro) 

更換

TARGET_LINK_LIBRARIES(project allegro) 

或者只是讓你不需要任何插件列表。在這種情況下,例如,對於使用'al_draw_line',您只需要'allegro_primitives'來使其工作。

+0

謝謝Metinu – Lifka