未定义的引用glfwSetErrorCallback

我试图使用GLFW库,但编译一个简单的程序时遇到了困难。 我去了GLFW 网站下载最新版本,然后使用“ 如何构build和安装GLFW 3并在Linux项目中使用它 ”我构build并安装了它。

这是我的代码:

#include <GLFW/glfw3.h> #include <iostream> using std::cout; using std::endl; void GLFW_error(int error, const char* description) { fputs(description, stderr); } void run() { cout << "pooch" << endl; } int main() { glfwSetErrorCallback(GLFW_error); if (!glfwInit()) exit(EXIT_FAILURE); run(); glfwTerminate(); return 0; } 

使用命令行

 bulletbill22@ROBOTRON ~/Desktop $ g++ -std=c++11 -lglfw source.cpp 

产量

 source.cpp:function main: error: undefined reference to 'glfwSetErrorCallback' 

glfwSetErrorCallback取自他们的“设置错误callback” 教程 。

/usr/bin/ld: error: cannot find -lglfw3包含-glfw3结果/usr/bin/ld: error: cannot find -lglfw3

即使所有东西都安装正确,但我怀疑问题可能出在安装GLFW库的地方,因为我不习惯CMake,也不完全了解它是如何工作的。 我感到很沮丧,因为答案一定很简单,但我不确定哪些关键字在search问题时真正相关; 大多数结果是不正确地编译CMake的人,在这种情况下我不编译。

似乎glfw3.h头文件和libglfw3.so (和/或libglfw3.a )库的目录不在默认路径中。

您可以通过向g++选项添加-v选项来进行检查。 找到找到glfw3.h头文件的目录 – 调用$GLFW_INCDIR – 通常以.../GLFW 。 找到找到库的目录 – 调用$GLFW_LIBDIR 。 尝试:

g++ -std=c++11 -I$GLFW_INCDIR source.cpp -o pooch -L$GLFW_LIBDIR -lglfw3

如果所有的图书馆依赖关系都满足了,那么希望这样做会产生一个名为pooch的程序。

另一件事:GLFW3是一个C库,回调函数参数预计是C函数。 所以你的回调应该有'C'连接,也就是说,

extern "C" void GLFW_error(int error, const char* description) ...


另外,如果你遇到cmake ,你可能已经安装了ccmake 。 尝试ccmake . 在用于“交互”配置的GLFW3包的顶层目录中。