Followers 0

# OpenGL unresolved external symbol problem

## 32 posts in this topic

Hi I'm new to OpenGl i was working with VBOs first time using glMultiDrawElements so the identifier couldnt be found so i inculded glew:

#include <GL/glew.h>


and then i faced another problem (LINKER ERROR) :

 error LNK2001: unresolved external symbol __imp____glewMultiDrawElements


anyone can help me with that.

My Code (In Case) :

#include <Windows.h>
#include <iostream>
#include <GL/glew.h>
#include <gl\GL.h>

#if defined(__APPLE__)
#include <GLUT/glut.h>
#else
#include <GL/glut.h>
#endif

void init(void){
glClearColor(0,0,0,0);
}

void reshape(int w,int h){
glViewport(0,0,(GLsizei)w,(GLsizei)h);
glMatrixMode(GL_PROJECTION);
glMatrixMode(GL_MODELVIEW);
gluPerspective(45,1,0,200);
}

void display(void){
glClear(GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT);

glEnableClientState(GL_VERTEX_ARRAY);
glEnableClientState(GL_COLOR_ARRAY);

static GLubyte oneIndices[] = {0, 1, 2, 3, 4, 5, 6};
static GLubyte twoIndices[] = {7, 1, 8, 9, 10, 11};
static GLsizei count[] = {7, 6};
static const GLvoid * indices[2] = {oneIndices, twoIndices};

glMultiDrawElements(GL_LINE_STRIP, count, GL_UNSIGNED_BYTE, indices, 2);

glDisableClientState(GL_VERTEX_ARRAY);
glDisableClientState(GL_COLOR_ARRAY);

glFlush();

glutSwapBuffers();
}

int main(int argc , char** argv){
glutInit(&argc , argv);
glutInitDisplayMode(GLUT_DOUBLE|GLUT_RGBA);
glutInitWindowSize(250,250);
glutInitWindowPosition(0,0);
glutCreateWindow(argv[0]);
init();
glutDisplayFunc(display);
glutReshapeFunc(reshape);
glutMainLoop();
return 0;
}


Thanks.

0

##### Share on other sites

sry.

same problem as before :

 error LNK2001: unresolved external symbol __imp____glewMultiDrawElements


i linked all OpenGL files correctly ( I Think ).

When i use glewInit Instead of glutInit :

error LNK2001: unresolved external symbol __imp____glewMultiDrawElements
error LNK2019: unresolved external symbol __imp__glewInit@0 referenced in function _main


i don't know what is the problem with linking files.

Thanks.

0

##### Share on other sites

i linked all OpenGL files correctly

You need to link to GLEW, not just OpenGL.

When i use glewInit Instead of glutInit

You'll need both.

1

##### Share on other sites

i linked all glew files again it doesnt change .

I followed this path :

http://glew.sourceforge.net/install.html

0

##### Share on other sites
Are you building the glew source into your program, or linking to glew32.lib? (the referenced page describes both approaches)
1

##### Share on other sites

I went to Project setting and added glew32.lib in Additional Options after i set up the inculde lib and bin files

0

##### Share on other sites

By the way my system is X64 is that going to change something???

0

##### Share on other sites

Thanks but how can i solve the problem ?

0

##### Share on other sites

Adding the dependency to the list is just part of the issue. The compiler/linker still have to be able to find the dependency. If the linker cannot find the library in its search directory, then you will still end up with unresolved symbols even though they were added to the list.

1

##### Share on other sites

how can i know the linker found it or not ?

i deleted the command : glMultiDrawElements , And i ran the program , it was successful.

Edited by haykan648
0

##### Share on other sites

how can i now the linker found it or not ?

The linker won't tell whether or not he found the file (although I have no idea why they don't do it). You have to check your linker paths ("Additional Linker Directories" in VS) and see if the path of you libary is included.
2

##### Share on other sites

yes it is included. i put everything i need in VC directory (in bin, library and include files) and i checked the {VS Directory}/bin  and  {VS Directory}/library and {VS Directory}/include in Additional Linker Directorys they were linked correctly .

0

##### Share on other sites

since you have all linked its easy to get it working:

in glew.h



#define glMultiDrawElements GLEW_GET_FUN(__glewMultiDrawElements)
GLEW_FUN_EXPORT PFNGLMULTIDRAWELEMENTSPROC __glewMultiDrawElements;
typedef void (GLAPIENTRY * PFNGLMULTIDRAWELEMENTSPROC) (GLenum mode, GLsizei *count, GLenum type, const GLvoid **indices, GLsizei primcount);


so to get it working: (in your app) (ofc add #include glew.h or in my case gl/glew.h)



PFNGLMULTIDRAWELEMENTSPROC  glMultiDrawElements; //name it whatever you want


and in cpp file: you need to initalize it



glMultiDrawElements = NULL;


be happy its working ;p at least should be

if its still NULL then your card  does not support such kind of feature

Edited by WiredCat
0

##### Share on other sites

VC Directory? You are not talking about C:\Program Files (x86)\Microsoft Visual Studio 12.0\VC (or whereever you installed VS) hopefully. I still think that either your library includes are wrong or you are linking against the wrong library. Can you upload the solution so we can take a look at your project settings?

1

##### Share on other sites

Sry i had a problem with git so i uploaded here :

http://uploadboy.com/kvwp4inyjad4.html


thank you all for your helps !

0

##### Share on other sites

You have specified the "glew32.lib glew32s.lib" under "Additional Include Directories". First, that is the place where you put the paths where the compiler should look for  #include "..." files. Libraries need to go into "Linker\Input\Additional Dependencies". Second, you can't put two libraries, paths, etc. in the same line; use one line per entry or separate the entries with a semicolon.

Also, you should only link glew32.lib or glew32s.lib, not both of them. glew32.lib is for dynamic linking (requires glew32.dll at runtime), glew32s.lib is for static linking (no dll required). If you go for static linking you need to #define GLEW_STATIC before you #include <glew.h>.

2

##### Share on other sites

Did you compile it successfully? cause i removed glew32s.lib and put the glew32.lib in Linker > Input > Dependencies and i face the same error as before.

0

##### Share on other sites

No, I haven't even tried to compile it as I have neither GLUT nor GLEW libraries on my computer. You might want to add the path to the glew32 lib unter "Linker\General\Additional Libary Directories". Forgot to mention that one in my last post.

1

##### Share on other sites

i did it. didn't change :(

0

##### Share on other sites

PFNGLMULTIDRAWELEMENTSPROC glMultiDrawElements; //name it whatever you want

and in cpp file: you need to initalize it

Its more than 10000 Lines where should i add it?

Edited by haykan648
0

##### Share on other sites

Another thing that I noticed when I opened the project file in Notepad++. It seems like you have copied GLEW (at least the glew.h) into Visual Studio installation directory. I strongly recommend you to not copy any file into these folders, they are meant for Microsoft's C++ implementation. Put your files into some other folder (C:\Programming Stuff\... or so) or, if we're talking about small libraries like GLEW even inside your project folder.

Are you sure that the paths you entered are correct? You might want to upload the updated project (after you moved GLEW out of the VS directory :)) again.

1

## Create an account

Register a new account

Followers 0

• ### Similar Content

• By mapra99
Hello

I am working on a recent project and I have been learning how to code in C# using OpenGL libraries for some graphics. I have achieved some quite interesting things using TAO Framework writing in Console Applications, creating a GLUT Window. But my problem now is that I need to incorporate the Graphics in a Windows Form so I can relate the objects that I render with some .NET Controls.

To deal with this problem, I have seen in some forums that it's better to use OpenTK instead of TAO Framework, so I can use the glControl that OpenTK libraries offer. However, I haven't found complete articles, tutorials or source codes that help using the glControl or that may insert me into de OpenTK functions. Would somebody please share in this forum some links or files where I can find good documentation about this topic? Or may I use another library different of OpenTK?

Thanks!

• Hello, I have been working on SH Irradiance map rendering, and I have been using a GLSL pixel shader to render SH irradiance to 2D irradiance maps for my static objects. I already have it working with 9 3D textures so far for the first 9 SH functions.
In my GLSL shader, I have to send in 9 SH Coefficient 3D Texures that use RGBA8 as a pixel format. RGB being used for the coefficients for red, green, and blue, and the A for checking if the voxel is in use (for the 3D texture solidification shader to prevent bleeding).
My problem is, I want to knock this number of textures down to something like 4 or 5. Getting even lower would be a godsend. This is because I eventually plan on adding more SH Coefficient 3D Textures for other parts of the game map (such as inside rooms, as opposed to the outside), to circumvent irradiance probe bleeding between rooms separated by walls. I don't want to reach the 32 texture limit too soon. Also, I figure that it would be a LOT faster.
Is there a way I could, say, store 2 sets of SH Coefficients for 2 SH functions inside a texture with RGBA16 pixels? If so, how would I extract them from inside GLSL? Let me know if you have any suggestions ^^.
• By KarimIO
EDIT: I thought this was restricted to Attribute-Created GL contexts, but it isn't, so I rewrote the post.
Hey guys, whenever I call SwapBuffers(hDC), I get a crash, and I get a "Too many posts were made to a semaphore." from Windows as I call SwapBuffers. What could be the cause of this?
Update: No crash occurs if I don't draw, just clear and swap.
static PIXELFORMATDESCRIPTOR pfd = // pfd Tells Windows How We Want Things To Be { sizeof(PIXELFORMATDESCRIPTOR), // Size Of This Pixel Format Descriptor 1, // Version Number PFD_DRAW_TO_WINDOW | // Format Must Support Window PFD_SUPPORT_OPENGL | // Format Must Support OpenGL PFD_DOUBLEBUFFER, // Must Support Double Buffering PFD_TYPE_RGBA, // Request An RGBA Format 32, // Select Our Color Depth 0, 0, 0, 0, 0, 0, // Color Bits Ignored 0, // No Alpha Buffer 0, // Shift Bit Ignored 0, // No Accumulation Buffer 0, 0, 0, 0, // Accumulation Bits Ignored 24, // 24Bit Z-Buffer (Depth Buffer) 0, // No Stencil Buffer 0, // No Auxiliary Buffer PFD_MAIN_PLANE, // Main Drawing Layer 0, // Reserved 0, 0, 0 // Layer Masks Ignored }; if (!(hDC = GetDC(windowHandle))) return false; unsigned int PixelFormat; if (!(PixelFormat = ChoosePixelFormat(hDC, &pfd))) return false; if (!SetPixelFormat(hDC, PixelFormat, &pfd)) return false; hRC = wglCreateContext(hDC); if (!hRC) { std::cout << "wglCreateContext Failed!\n"; return false; } if (wglMakeCurrent(hDC, hRC) == NULL) { std::cout << "Make Context Current Second Failed!\n"; return false; } ... // OGL Buffer Initialization glClear(GL_DEPTH_BUFFER_BIT | GL_COLOR_BUFFER_BIT); glBindVertexArray(vao); glUseProgram(myprogram); glDrawElements(GL_TRIANGLES, indexCount, GL_UNSIGNED_SHORT, (void *)indexStart); SwapBuffers(GetDC(window_handle));
• By Tchom
Hey devs!

I've been working on a OpenGL ES 2.0 android engine and I have begun implementing some simple (point) lighting. I had something fairly simple working, so I tried to get fancy and added color-tinting light. And it works great... with only one or two lights. Any more than that, the application drops about 15 frames per light added (my ideal is at least 4 or 5). I know implementing lighting is expensive, I just didn't think it was that expensive. I'm fairly new to the world of OpenGL and GLSL, so there is a good chance I've written some crappy shader code. If anyone had any feedback or tips on how I can optimize this code, please let me know.

uniform mat4 u_MVPMatrix; uniform mat4 u_MVMatrix; attribute vec4 a_Position; attribute vec3 a_Normal; attribute vec2 a_TexCoordinate; varying vec3 v_Position; varying vec3 v_Normal; varying vec2 v_TexCoordinate; void main() { v_Position = vec3(u_MVMatrix * a_Position); v_TexCoordinate = a_TexCoordinate; v_Normal = vec3(u_MVMatrix * vec4(a_Normal, 0.0)); gl_Position = u_MVPMatrix * a_Position; } Fragment Shader
precision mediump float; uniform vec4 u_LightPos["+numLights+"]; uniform vec4 u_LightColours["+numLights+"]; uniform float u_LightPower["+numLights+"]; uniform sampler2D u_Texture; varying vec3 v_Position; varying vec3 v_Normal; varying vec2 v_TexCoordinate; void main() { gl_FragColor = (texture2D(u_Texture, v_TexCoordinate)); float diffuse = 0.0; vec4 colourSum = vec4(1.0); for (int i = 0; i < "+numLights+"; i++) { vec3 toPointLight = vec3(u_LightPos[i]); float distance = length(toPointLight - v_Position); vec3 lightVector = normalize(toPointLight - v_Position); float diffuseDiff = 0.0; // The diffuse difference contributed from current light diffuseDiff = max(dot(v_Normal, lightVector), 0.0); diffuseDiff = diffuseDiff * (1.0 / (1.0 + ((1.0-u_LightPower[i])* distance * distance))); //Determine attenuatio diffuse += diffuseDiff; gl_FragColor.rgb *= vec3(1.0) / ((vec3(1.0) + ((vec3(1.0) - vec3(u_LightColours[i]))*diffuseDiff))); //The expensive part } diffuse += 0.1; //Add ambient light gl_FragColor.rgb *= diffuse; } Am I making any rookie mistakes? Or am I just being unrealistic about what I can do? Thanks in advance
• By yahiko00
Hi,
Not sure to post at the right place, if not, please forgive me...
For a game project I am working on, I would like to implement a 2D starfield as a background.
I do not want to deal with static tiles, since I plan to slowly animate the starfield. So, I am trying to figure out how to generate a random starfield for the entire map.
I feel that using a uniform distribution for the stars will not do the trick. Instead I would like something similar to the screenshot below, taken from the game Star Wars: Empire At War (all credits to Lucasfilm, Disney, and so on...).

Is there someone who could have an idea of a distribution which could result in such a starfield?
Any insight would be appreciated

• 10
• 11
• 20
• 11
• 28