无法编译C ++(使用GLFW)

时间:2015-07-21 03:40:00

标签: c++ g++ eclipse-cdt 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)

我一直在寻找谷歌和stackoverflow,我一定是在遗漏一些东西。我的库可能是32位,我正在尝试编译为64位,但我不知道如何检查这一点 另外,你会注意到我已经包含了glew头文件。如果我调用其中包含的函数,则会定义它们并且不会导致任何问题。任何帮助都非常感谢。

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

2 个答案:

答案 0 :(得分:1)

您好subtlepseudonym

错误:&#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'