2016-12-25 10 views
-1

Я пытаюсь скомпилировать программу, которая использует библиотеку GLFW3 на Ubuntu 16.04 x86_64. Я установил libglfw3 и libglfw3-dev. Затем я написал CMakeLists.txt:Функции GLFW не найдены

cmake_minimum_required (VERSION 2.6) 
project (Test) 
set (CMAKE_CXX_FLAGS "-lGL -lGLEW") 
set (CMAKE_EXE_LINKER_FLAGS -lglfw) 
add_executable(Test src/main.cpp) 

И main.cpp:

#include <stdio.h> 
#include <stdlib.h> 
#include <GL/glew.h> 
#include <GLFW/glfw3.h> 

int main() { 

    if (!glfwInit()) { 
     return -1; 
    } 

    glfwTerminate(); 

    return 0; 
} 

Но я получаю сообщение об ошибке из make команды:

main.cpp:(.text+0x5): undefined reference to `glfwInit' 
main.cpp:(.text+0x1a): undefined reference to `glfwTerminate' 
collect2: error: ld returned 1 exit status 
CMakeFiles/Test.dir/build.make:94: recipe for target 'Test' failed 
make[2]: *** [Test] Error 1 
CMakeFiles/Makefile2:67: recipe for target 'CMakeFiles/Test.dir/all' failed 
make[1]: *** [CMakeFiles/Test.dir/all] Error 2 
Makefile:83: recipe for target 'all' failed 
make: *** [all] Error 2 

Что я делаю неправильно? Почему он не может найти GLFW3?

+1

Вы ссылаетесь на библиотеку GLEW? – Zebrafish

+0

Я думал, что эта строка 'set (CMAKE_EXE_LINKER_FLAGS -lglfw)' должна связывать эту библиотеку, это не так? Просто я узнаю только CMake. Я использовал проектную систему Visual Studio и ее компилятор в Windows. –

+0

Вы собрали библиотеку GLFW на Ubuntu, но пытаетесь запустить программу в Windows Visual Studio? – Zebrafish

ответ

1

Native способ для связи с библиотекой в ​​CMake является target_link_libraries:

cmake_minimum_required (VERSION 2.6) 
project (Test) 
add_executable(Test src/main.cpp) 
target_link_libraries(Test GL GLEW glfw) 

Обратите внимание, что это работает только тогда, когда GL и другие ЛИЭСЫ устанавливаются в места, по умолчанию, известных компилятор и компоновщик. В противном случае лучше использовать find_package(GLEW) и другие звонки find_package(), как указано @tambre.

+0

Спасибо! Я попробую это решение. –