Я делаю 2D боковой скроллер в C ++ с использованием OpenGL на Visual Studio 2010 Express. Я пытаюсь скомпилировать мой код, и он собирается правильно, но я получаю ошибки компоновщика для функций GLFW, которые я инициализирую в функции main (). Вот мой код:
#include <iostream>
#include <ctime>#include <GL\glfw.h>#include "Player.h"
void render();
void update();Player Player1;
//Cross platform sleep implementation
void _sleep(double ms)
{
double st = clock();
if(ms <= 0)
ms = 10;
while(clock() < (ms + st));
}
int main(int argc, char** argv)
{
std::cout <<"Loading Prized Fighter"<< std::endl;
glfwInit(); //Initialize GLFW
//Create GLFW window
if(glfwOpenWindow(800, 600, 5, 6, 5, 0, 8, 0, GLFW_WINDOW) != GL_TRUE)
std::cout << "Error creating window!" << std::endl;
//Set window title
glfwSetWindowTitle("Prized Fighter");
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
//Start main game loop
//This calls the functions which update objects and render them to the screen
while(true)
{
update();
render();
glfwSwapBuffers(); //Switch buffers (double rendering)
_sleep(10.0); //Let a bit of CPU time for other processes
}
return 0;
}
/*
- Render function -
Used to draw objects to the screen
*/
void render()
{
glClearColor(0.0f, 0.0f, 0.0f, 0.0f); //Color to clear the screen
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
//TODO: Draw stuff here
Player1.draw();
}
/*
- Update function -
Updates objects; states, locations, etc
*/
void update()
{
//TODO: Update objects here
Player1.update();
}
Когда я компилирую, я получаю следующие ошибки:
1> —— Началась сборка: Проект: Prized Fighter, Конфигурация: Отладка Win32 ——
1> main.obj: ошибка LNK2019: неразрешенный внешний символ _glfwSwapBuffers, указанный в> функции _WinMain @ 81> main.obj: ошибка LNK2019: неразрешенный внешний символ _glfwSetWindowTitle, указанный в> функции _WinMain @ 8
1> main.obj: ошибка LNK2019: неразрешенный внешний символ _glfwOpenWindow, указанный в> функции _WinMain @ 8
1> main.obj: ошибка LNK2019: неразрешенный внешний символ _glfwInit, указанный в функции> _WinMain @ 8
1> MSVCRTD.lib (crtexew.obj): ошибка LNK2019: неразрешенный внешний символ WinMain @ 16> упоминается в функции __tmainCRTStartup
1> c: \ users \ brennan \ documents \ visual studio 2010 \ Projects \ Prized Fighter \ Debug \ Prized> Fighter.exe: фатальная ошибка LNK1120: 5 неразрешенных внешних объектов
========== Построение: 0 выполнено, 1 не выполнено, 0 обновлено, 0 пропущено ===========
Что не так во время компоновки — есть ли ошибка в коде?
Вы получаете эти ошибки, потому что вы не ссылаетесь на библиотеку GFWL или неправильно ссылаетесь на нее. Эта библиотека содержит определения функций, которые вы пытаетесь вызвать.
Раздел 4.2 файла readme GFWL объясняет, какие библиотеки использовать при компоновке; Если вы статически делаете ссылки (похоже, что вы есть) или используете DLL, необходимые вам шаги будут другими.
Для будущих читателей, которые уже ссылались на правильные библиотеки и могут столкнуться с аналогичной проблемой с файлами GLAD для проектов C ++:
Мне просто нужно было включить файл glad.c в проект через вкладку «Свойства» (которая должна появляться при каждом нажатии на файл, вы можете включить вкладку свойств через «Вид»> «Окно свойств»).
Убедитесь, что для параметра «Включено в проект» установлено значение «Истина»:
По этой причине у меня остались неразрешенные внешние символы для glad.c, что может пригодиться любому, кто здесь находится.