我正在尝试使用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编译不正确的人,在这种情况下我没有编译。
答案 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 .
进行“交互式”配置。