编译 C++ 时出现问题(使用 GLFW)

Trouble Compiling C++ (with GLFW)

我使用 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)

我一直在寻找 google 和 Whosebug,我一定遗漏了什么。我的库可能是 32 位的,我正在尝试编译为 64 位,但我不确定如何检查它。
另外,您会注意到我包含了 glew 头文件。如果我调用其中包含的函数,它们将被定义并且不会引起任何问题。非常感谢任何帮助。

更新: 尝试使用 glfw (libglfw3.a) 的 32 位库构建后,我遇到了一个新错误。 ../lib\libglfw3.a(init.c.obj):init.c:(.text+0x49): 未定义引用`__ms_vsnprintf'

你好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" 进行构建,结果运行良好。

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

我有类似的问题:

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

链接器错误:

undefined reference to `_imp__glfwCreateWindow'

在尝试了无数次 "solutions" 之后,解决方法是删除 #define GLFW_DLL:

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