我使用glfw3编写了一个简单的程序,我相信我已经链接了适用的(静态)库并正确地包含了头文件。
#include "Main.h"
#include <GL/glew.h>
#include <GLFW/glfw3.h>
#include <iostream>
using namespace std;
Main::Main() {
if (glfwInit()) {
GLFWwindow* window = glfwCreateWindow(640, 480, "Woo", NULL, NULL);
glfwDestroyWindow(window);
}
}
int main() {
int val = 0;
Main* test = new Main();
return val;
}
Main::~Main() {
// TODO Auto-generated destructor stub
}
以下是我的命令行输出:
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)
我一直在寻找谷歌和stackoverflow,我一定是在遗漏一些东西。我的库可能是32位,我正在尝试编译为64位,但我不知道如何检查这一点 另外,你会注意到我已经包含了glew头文件。如果我调用其中包含的函数,则会定义它们并且不会导致任何问题。任何帮助都非常感谢。
更新: 在尝试使用32位库为glfw(libglfw3.a)构建之后,我遇到了一个新错误。 ../lib\libglfw3.a(init.c.obj):init.c:(.text+0x49):对__ms_vsnprintf'的未定义引用
答案 0 :(得分:1)
错误:&#34; ../ lib \ libglfw3.a(init.c.obj):init.c :(。text + 0x49):未定义引用`__ms_vsnprintf&#39;&# 34; 强>
在我看来,是因为您正在尝试在Linux上构建代码,但您拥有的glfw二进制文件适用于Windows平台。
我假设您使用的是linux / unix平台,因为我将编译器视为g ++。
&#34; __ ms_vsnprintf&#34;存在于为windows平台构建的glfw库中。
我尝试通过一些修改和构建,使用&#34; glew&#34;来构建我的代码。和&#34; glfw&#34;在当地,它工作得很好。
如果您仍然遇到问题,我还会添加这些详细信息。
答案 1 :(得分:-1)
我有类似的问题:
build\Package Release
链接器错误:
GLFWwindow* window = glfwCreateWindow (640, 480, "just a random title", NULL, NULL);
在尝试了许多“解决方案”后,解决方法是删除#define GLFW_DLL:
undefined reference to `_imp__glfwCreateWindow'