2016-12-25 74 views
-1

我尝试编译一个在Ubuntu 16.04 x86_64上使用GLFW3库的程序。我安装了libglfw3libglfw3-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?在CMake的与库链接

+1

你链接到GLEW库吗? – Zebrafish

+0

我以为这个字符串'set(CMAKE_EXE_LINKER_FLAGS -lglfw)'必须链接这个库,它不是?只是我只学习CMake。我在Windows上使用了Visual Studio项目系统及其编译器。 –

+0

您在Ubuntu上编译了GLFW库,但您试图在Windows Visual Studio中运行该程序? – Zebrafish

回答

1

原生方式是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

谢谢!我会尝试这个解决方案。 –