编译 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'
错误:"../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>
我使用 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'
错误:"../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>