未定义的glfwSetErrorCallback引用

时间:2014-07-10 06:11:27

标签: c++ linux command-line cmake glfw

我正在尝试使用GLFW库,但是编译简单程序时遇到了困难。我去了GLFW website并下载了最新版本,然后使用“How to build & install GLFW 3 and use it in a Linux project”我构建并安装了它。

这是我的代码:

#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取自他们tutorial的“设置错误回调”。

加入-glfw3会导致/usr/bin/ld: error: cannot find -lglfw3

即使所有内容似乎都安装正确,我怀疑问题可能出在安装GLFW库的地方,因为我不习惯CMake并且不完全了解它是如何工作的。我很沮丧,因为答案必须简单,但我不确定在搜索问题时哪些关键字真正相关;主要是结果是使用CMake编译不正确的人,在这种情况下我没有编译。

1 个答案:

答案 0 :(得分:2)

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

您可以通过向-v选项添加g++选项来查看。找到找到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。尝试在GLFW3包的顶级目录中ccmake .进行“交互式”配置。