我是c ++的新手,但我在其他编程语言方面有一些编程经验,所以用谷歌搜索来阅读c ++代码没有问题。
对于uni项目,我需要编写一个游戏,我们应该使用他们的一个库,称为ACGL。我们也使用GLFW,它似乎工作正常。 (我将GLFW-binaries的正确文件复制到C:\ MinGW \ include和C:\ MinGW \ lib,并将.dll添加到main.cpp所在的文件夹中)
我使用MinGW和Netbeans 8.0.1 for Windows 7 32位。 我下载了ACGL并将文件夹放在C:\ MinGW \ include。
中的include文件夹中现在我在main.cpp中有一些代码:
//#define ACGL_OPENGL_VERSION_32
//#define ACGL_OPENGL_PROFILE_CORE
#include <ACGL/ACGL.hh>
//#include <ACGL/OpenGL/GL.hh>
#include <GLFW/glfw3.h>
#include <stdlib.h>
#include <stdio.h>
static void error_callback(int error, const char* description) {
fputs(description, stderr);
}
static void key_callback(GLFWwindow* window, int key, int scancode, int action, int mods) {
if (key == GLFW_KEY_ESCAPE && action == GLFW_PRESS)
glfwSetWindowShouldClose(window, GL_TRUE);
}
int main(void) {
GLFWwindow* window;
glfwSetErrorCallback(error_callback);
if (!glfwInit())
exit(EXIT_FAILURE);
window = glfwCreateWindow(640, 480, "Simple example", NULL, NULL);
if (!window || !(ACGL::init(true))) {
glfwTerminate();
exit(EXIT_FAILURE);
}
glfwMakeContextCurrent(window);
glfwSetKeyCallback(window, key_callback);
while (!glfwWindowShouldClose(window)) {
float ratio;
int width, height;
glfwGetFramebufferSize(window, &width, &height);
ratio = width / (float) height;
glViewport(0, 0, width, height);
glClear(GL_COLOR_BUFFER_BIT);
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
glOrtho(-ratio, ratio, -1.f, 1.f, 1.f, -1.f);
glMatrixMode(GL_MODELVIEW);
glLoadIdentity();
glRotatef((float) glfwGetTime() * 50.f, 0.f, 0.f, 1.f);
glBegin(GL_TRIANGLES);
glColor3f(1.f, 0.f, 0.f);
glVertex3f(-0.6f, -0.4f, 0.f);
glColor3f(0.f, 1.f, 0.f);
glVertex3f(0.6f, -0.4f, 0.f);
glColor3f(0.f, 0.f, 1.f);
glVertex3f(0.f, 0.6f, 0.f);
glEnd();
glfwSwapBuffers(window);
glfwPollEvents();
}
glfwDestroyWindow(window);
glfwTerminate();
exit(EXIT_SUCCESS);
}
基本上,使用ACGL的GLFW示例(运行良好的btw)包括在顶部,ACGL :: init()函数在正确的位置。
一切似乎都很好,Netbeans能够找到(Ctrl-Click)并且它还在相应的ACGL.cc中找到init函数(Ctrl-Click)
但是,当我尝试使用Netbeans编译项目时,会发生以下错误:
"/C/MinGW/MSYS/1.0/bin/make.exe" -f nbproject/Makefile-Debug.mk QMAKE= SUBPROJECTS= .clean-conf
make.exe[1]: Entering directory `/c/Users/Tarek/Desktop/Netbeans Workspace/swpp-ws-14-15-a/MarbleGame'
rm -f -r build/Debug
rm -f dist/Debug/MinGW-Windows/marblegame.exe
make.exe[1]: Leaving directory `/c/Users/Tarek/Desktop/Netbeans Workspace/swpp-ws-14-15-a/MarbleGame'
CLEAN SUCCESSFUL (total time: 2s)
"/C/MinGW/MSYS/1.0/bin/make.exe" -f nbproject/Makefile-Debug.mk QMAKE= SUBPROJECTS= .build-conf
make.exe[1]: Entering directory `/c/Users/Tarek/Desktop/Netbeans Workspace/swpp-ws-14-15-a/MarbleGame'
"/C/MinGW/MSYS/1.0/bin/make.exe" -f nbproject/Makefile-Debug.mk dist/Debug/MinGW-Windows/marblegame.exe
make.exe[2]: Entering directory `/c/Users/Tarek/Desktop/Netbeans Workspace/swpp-ws-14-15-a/MarbleGame'
mkdir -p build/Debug/MinGW-Windows
rm -f "build/Debug/MinGW-Windows/main.o.d"
g++ -c -g -MMD -MP -MF "build/Debug/MinGW-Windows/main.o.d" -o build/Debug/MinGW-Windows/main.o main.cpp
mkdir -p dist/Debug/MinGW-Windows
g++ -o dist/Debug/MinGW-Windows/marblegame build/Debug/MinGW-Windows/main.o -lglfw3dll -lopengl32
build/Debug/MinGW-Windows/main.o: In function `main':
C:\Users\Tarek\Desktop\Netbeans Workspace\swpp-ws-14-15-a\MarbleGame/main.cpp:24: undefined reference to `ACGL::init(bool)'
collect2.exe: error: ld returned 1 exit status
make.exe[2]: *** [dist/Debug/MinGW-Windows/marblegame.exe] Error 1
make.exe[2]: Leaving directory `/c/Users/Tarek/Desktop/Netbeans Workspace/swpp-ws-14-15-a/MarbleGame'
make.exe[1]: *** [.build-conf] Error 2
make.exe[1]: Leaving directory `/c/Users/Tarek/Desktop/Netbeans Workspace/swpp-ws-14-15-a/MarbleGame'
make.exe": *** [.build-impl] Error 2
BUILD FAILED (exit value 2, total time: 4s)
怎么可能,Netbeans找到了引用,但编译器没有? 我没有任何.a文件可以复制到C:\ MinGW \ lib所以我不知道我是否可能需要以另一种方式为编译器链接东西? init函数在一个名为&#34; ACGL&#34;的命名空间中定义,但是我调用了ACGL :: init(),所以这也不是问题,对吧?我在这里看不到什么?
如果您还需要其他任何内容(除了ACGL的代码 - 我不认为我们可以分享它),请发表评论并尝试提供。
感谢您的帮助。
答案 0 :(得分:0)
我有我的大学和CMakeLists.txt提供的资源,因此我使用cmake为MSYS生成一个makefile,并使用make重新编译,生成目标文件和库,可以放在C:\ MinGW \ lib中。