对glfwSetErrorCallback的未定义引用

4
我将尝试使用GLFW库,但是编写一个简单的程序时遇到了困难。我去了GLFW 官网 并下载了最新版本,然后按照 "如何在Linux项目中构建和安装GLFW 3并使用它" 的方法进行了构建和安装。
以下是我的代码:
#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来自于他们关于“设置错误回调”的教程

包含-glfw3后,会出现/usr/bin/ld: error: cannot find -lglfw3的错误信息。

尽管一切似乎都安装正确,但我怀疑问题可能出在GLFW库的安装上,因为我不熟悉CMake,也不完全理解它的工作原理。我很沮丧,因为答案一定是简单的,但我不确定哪些关键字在谷歌搜索中真正相关;大多数结果都是人们使用CMake编译时出了错,而这种情况下我没有使用CMake进行编译。


我认为你忘记在主函数中打开共享库了。使用 dlopen() 函数来打开共享库。 - Singh
1个回答

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 . 进行“交互式”配置。

谢谢,是的,它们没有被正确地包含进去。 - user3824052

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接