PDA

View Full Version : The compiler shows linker errors for a project



Tomyfr
10-05-2017, 02:34 AM
Hi all,

Finally I could set the Visual Studio 2017 for OpenGL.
I created an Empty Project named opengl. Then tested this code (https://learnopengl.com/code_viewer_gh.php?code=src/1.getting_started/1.1.hello_window/hello_window.cpp) on it.
The output is two windows as in here (https://s1.postimg.org/1f3efdd867/Capture.png).

Is it fine that the Visual Studio shows two windows for this project? I mean, is my result the same as yours?

Then I pasted this code (https://learnopengl.com/code_viewer_gh.php?code=src/1.getting_started/2.1.hello_triangle/hello_triangle.cpp) this time into the project. The output is this (https://s1.postimg.org/7rq7c40b33/Capture.png).

It seems that everything is OK.

Since I'm reading the book "OpenGL.Programming.Guide.9th.Edition" and in page 40, it offers a first code named Example1.1 with this code:


#include <iostream>
using namespace std;
#include "vgl.h"
#include "LoadShaders.h"

enum VAO_IDs { Triangles, NumVAOs };
enum Buffer_IDs { ArrayBuffer, NumBuffers };
enum Attrib_IDs { vPosition = 0 };
GLuint VAOs[NumVAOs];
GLuint Buffers[NumBuffers];
const GLuint NumVertices = 6;
//--------------------------------------------------------------------
//
// init
//
void
init(void)
{
static const GLfloat vertices[NumVertices][2] =
{
{ -0.90, -0.90 }, // Triangle 1
{ 0.85, -0.90 },
{ -0.90, 0.85 },
{ 0.90, -0.85 }, // Triangle 2
{ 0.90, 0.90 },
{ -0.85, 0.90 }
};
glCreateBuffers(NumBuffers, Buffers);
glNamedBufferStorage(Buffers[ArrayBuffer], sizeof(vertices),
vertices, 0);
ShaderInfo shaders[] = {
{ GL_VERTEX_SHADER, "triangles.vert" },
{ GL_FRAGMENT_SHADER, "triangles.frag" },
{ GL_NONE, NULL }
};
GLuint program = LoadShaders(shaders);
glUseProgram(program);
glGenVertexArrays(NumVAOs, VAOs);
glBindVertexArray(VAOs[Triangles]);
glBindBuffer(GL_ARRAY_BUFFER, Buffers[ArrayBuffer]);
glVertexAttribPointer(vPosition, 2, GL_FLOAT,
GL_FALSE, 0, BUFFER_OFFSET(0));
glEnableVertexAttribArray(vPosition);
}
//--------------------------------------------------------------------
//
// display
//
void
display(void)
{
static const float black[] = { 0.0f, 0.0f, 0.0f, 0.0f };
glClearBufferfv(GL_COLOR, 0, black);
glBindVertexArray(VAOs[Triangles]);
glDrawArrays(GL_TRIANGLES, 0, NumVertices);
}
//--------------------------------------------------------------------
//
// main
//
int
main(int argc, char** argv)
{
glfwInit();
GLFWwindow* window = glfwCreateWindow(640, 480, "Triangles", NULL,
NULL);
glfwMakeContextCurrent(window);
gl3wInit();
init();

while (!glfwWindowShouldClose(window))
{
display();
glfwSwapBuffers(window);
glfwPollEvents();
}

glfwDestroyWindow(window);
glfwTerminate();
}


so this time, I pasted this code to the project. It shows no red lines but when I runt it, I get these 13 errors:
https://s1.postimg.org/6yp2zukgcf/Capture.png

Why do I get these errors for this specific code and how to solve it please?

Dark Photon
10-05-2017, 05:21 AM
these 13 errors:
https://s1.postimg.org/6yp2zukgcf/Capture.png

Why do I get these errors for this specific code and how to solve it please?

The unresolved symbols on link imply that you are not linking in the library "glfw3.lib" (or "glfw3_d.lib" in debug mode). This library is in the examples/lib/ directory in the book examples build tree.

The book example build files link this library for you.

Silence
10-05-2017, 06:38 AM
Is it fine that the Visual Studio shows two windows for this project? I mean, is my result the same as yours?

Yes. You have the Windows console window, plus the OpenGL window.
If you don't want the console, there are some things (or options) to do (or change) in Visual Studio. I don't remember them, and I suggest you to keep it for now, since it will allow you to output relevant and important information.


It shows no red lines but when I runt it, I get these 13 errors:
https://s1.postimg.org/6yp2zukgcf/Capture.png

Why do I get these errors for this specific code and how to solve it please?

I would suggest you to read articles about compilation and linking. This is essential when programming with languages like C or C++. Here are a few top results returned by google here:

https://www.cprogramming.com/compilingandlinking.html
https://stackoverflow.com/questions/6264249/how-does-the-compilation-linking-process-work

Tomyfr
10-05-2017, 10:03 AM
The unresolved symbols on link imply that you are not linking in the library "glfw3.lib" (or "glfw3_d.lib" in debug mode).

I entered the name of that lib fine in the Linker > Input and ran the code this time. Here (https://s1.postimg.org/5u7abnli0f/Capture.png) is the output.

The error says that it can't open that lib file. It's logical because I haven't got that file in the lib folder. Now I think I need only that lib file to put into that folder and run the code again.


This library is in the examples/lib/ directory in the book examples build tree.
I don't have that directory unfortunately.

Tomyfr
10-05-2017, 10:26 AM
Yes. You have the Windows console window, plus the OpenGL window.
If you don't want the console, there are some things (or options) to do (or change) in Visual Studio. I don't remember them, and I suggest you to keep it for now, since it will allow you to output relevant and important information.

OK, thanks.


I would suggest you to read articles about compilation and linking. This is essential when programming with languages like C or C++. Here are a few top results returned by google here
Thank you, I read it.
I also knew somewhat about these and added the addresses of include and libraries folders to the Properties of the project.
I assume I only need that lib file to retest the code again.

Tomyfr
10-06-2017, 04:56 AM
No further guide?! :(
Have you tested this code on your VS?