2015-07-21 89 views
2

我已经使用glfw3编写了一个简单的程序,我相信我已经链接了适用的(静态)库并正确地包含了头文件。无法编译C++(使用GLFW)

下面是我的命令行输出:

23:20:58 **** Incremental Build of configuration Debug for project Void **** 
Info: Internal Builder is used for build 
g++ -L../lib -static -o Void Main.o -lglfw3 -lgdi32 -lglew32 -lopengl32 
Main.o: In function `ZN4MainC2Ev': 
G:\eclipse\CPP WorkSpace\Void\Debug/../Main.cpp:15: undefined reference to `glfwInit' 
G:\eclipse\CPP WorkSpace\Void\Debug/../Main.cpp:16: undefined reference to `glfwCreateWindow' 
G:\eclipse\CPP WorkSpace\Void\Debug/../Main.cpp:18: undefined reference to `glfwCreateWindow' 
G:\eclipse\CPP WorkSpace\Void\Debug/../Main.cpp:20: undefined reference to `glfwDestroyWindow' 
collect2.exe: error: ld returned 1 exit status 

23:20:59 Build Finished (took 205ms) 

我一直在寻找所有谷歌和计算器,我必须失去了一些东西。我的图书馆可能是32位,我试图编译为64位,但我不知道如何检查这一点。
另外,你会注意到我已经包含了glew头文件。如果我调用包含在其中的函数,它们被定义并且不会导致任何问题。任何帮助都非常感谢。

更新: 尝试使用glfw(libglfw3.a)的32位库构建后,出现新错误。 ../lib\libglfw3.a(init.c.obj):init.c:(.text+0x49):未定义参考`__ms_vsnprintf”

回答

0

你好subtlepseudonym

错误:“ ../lib\libglfw3.a(init.c.obj):init.c:(.text+0x49):未定义的引用在我看来,'__ms_vsnprintf'”

是由于这样的事实,你是试图在Linux上构建你的代码,但你有的glfw二进制文件是用于Windows平台的。

我假设你在linux/unix平台上,因为我看到编译器为g ++。

“__ms_vsnprintf”存在于为windows平台构建的glfw库中。

我试着在我的结尾修改代码并修改一下,然后在本地使用“glew”和“glfw”,它的工作完美。

如果您仍然遇到问题,我还会添加这些详细信息。

+0

我m在Windows 7上使用mingw。我会给Linux二进制文件一个尝试,让你知道发生了什么。感谢您的答复。 – subtlepseudonym

+0

我使用cmake编译了GLFW,并且包含了它的glfw3.h文件。该项目仍然不编译并列出glfw3.h中的方法为未定义的(如上面的编译器输出所示)。 – subtlepseudonym

+0

我通过在将它重命名为libglfw3dll.a后导入glfw3dll.a而得到它。这看起来像一个骇人的解决方案。 – subtlepseudonym

-1

我有类似的问题:

GLFWwindow* window = glfwCreateWindow (640, 480, "just a random title", NULL, NULL); 

链接错误:

undefined reference to `_imp__glfwCreateWindow' 

试图无数的 “解决方案” 后,修复了删除的#define GLFW_DLL:

// #define GLFW_DLL 
#include <GLFW/glfw3.h>