what can''t understand why both 2 individual .cpp files compile solution not build. code won't compile though follow instructions is
// two-dimensional sierpinski gasket // generated using randomly selected vertices , bisection #include "angel.h" #include <gl/glut.h> #include <gl/glew.h> #pragma comment(lib, "glew32.lib") const int numpoints = 5000; //---------------------------------------------------------------------------- void init( void ) { vec2 points[numpoints]; // specifiy vertices triangle vec2 vertices[3] = { vec2( -1.0, -1.0 ), vec2( 0.0, 1.0 ), vec2( 1.0, -1.0 ) }; // select arbitrary initial point inside of triangle points[0] = vec2( 0.25, 0.50 ); // compute , store n-1 new points ( int = 1; < numpoints; ++i ) { int j = rand() % 3; // pick vertex @ random // compute point halfway between selected vertex // , previous point points[i] = ( points[i - 1] + vertices[j] ) / 2.0; } // create vertex array object gluint vao; glgenvertexarrays( 1, &vao ); glbindvertexarray( vao ); // create , initialize buffer object gluint buffer; glgenbuffers( 1, &buffer ); glbindbuffer( gl_array_buffer, buffer ); glbufferdata( gl_array_buffer, sizeof(points), points, gl_static_draw ); // load shaders , use resulting shader program gluint program = initshader( "vshader21.glsl", "fshader21.glsl" ); gluseprogram( program ); // initialize vertex position attribute vertex shader gluint loc = glgetattriblocation( program, "vposition" ); glenablevertexattribarray( loc ); glvertexattribpointer( loc, 2, gl_float, gl_false, 0, buffer_offset(0) ); glclearcolor( 1.0, 1.0, 1.0, 1.0 ); // white background } //---------------------------------------------------------------------------- void display( void ) { glclear( gl_color_buffer_bit ); // clear window gldrawarrays( gl_points, 0, numpoints ); // draw points glflush(); } //---------------------------------------------------------------------------- void keyboard( unsigned char key, int x, int y ) { switch ( key ) { case 033: exit( exit_success ); break; } } //---------------------------------------------------------------------------- int main( int argc, char **argv ) { glutinit(&argc, argv); glutinitdisplaymode( glut_rgba ); glutinitwindowsize( 512, 512 ); // if using freeglut, next 2 lines check if // code 3.2. otherwise, comment them out glutinitcontextversion( 3, 1 ); glutinitcontextprofile( glut_core_profile ); glutcreatewindow( "sierpinski gasket" ); glewinit(); init(); glutdisplayfunc( display ); glutkeyboardfunc( keyboard ); glutmainloop(); return 0; }
i strange error message when try build example project edward angel's opengl site:
1>------ build started: project: 6e test, configuration: release win32 ------ 1>example1.obj : error lnk2001: unresolved external symbol __imp____glewbindbuffer 1>example1.obj : error lnk2001: unresolved external symbol __imp____glutcreatewindowwithexit@8 1>example1.obj : error lnk2001: unresolved external symbol __imp____glutinitwithexit@12 1>example1.obj : error lnk2001: unresolved external symbol __imp____glewvertexattribpointer 1>example1.obj : error lnk2001: unresolved external symbol __imp__glewinit@0 1>example1.obj : error lnk2001: unresolved external symbol __imp____glewgenvertexarrays 1>example1.obj : error lnk2001: unresolved external symbol __imp__glutinitcontextprofile@4 1>example1.obj : error lnk2001: unresolved external symbol __imp____glewuseprogram 1>example1.obj : error lnk2001: unresolved external symbol __imp__glutinitcontextversion@8 1>example1.obj : error lnk2001: unresolved external symbol __imp____glewbufferdata 1>example1.obj : error lnk2001: unresolved external symbol __imp____glewbindvertexarray 1>example1.obj : error lnk2001: unresolved external symbol __imp__glutinitdisplaymode@4 1>example1.obj : error lnk2001: unresolved external symbol __imp____glewgetattriblocation 1>example1.obj : error lnk2001: unresolved external symbol __imp____glewgenbuffers 1>example1.obj : error lnk2001: unresolved external symbol __imp__glutkeyboardfunc@4 1>example1.obj : error lnk2001: unresolved external symbol __imp__glutmainloop@0 1>example1.obj : error lnk2001: unresolved external symbol __imp__glutinitwindowsize@8 1>example1.obj : error lnk2001: unresolved external symbol __imp__glutdisplayfunc@4 1>example1.obj : error lnk2001: unresolved external symbol __imp____glewenablevertexattribarray 1>initshader.obj : error lnk2001: unresolved external symbol __imp____glewcreateshader 1>initshader.obj : error lnk2001: unresolved external symbol __imp____glewgetshaderinfolog 1>initshader.obj : error lnk2001: unresolved external symbol __imp____glewlinkprogram 1>initshader.obj : error lnk2001: unresolved external symbol __imp____glewcompileshader 1>initshader.obj : error lnk2001: unresolved external symbol __imp____glewshadersource 1>initshader.obj : error lnk2001: unresolved external symbol __imp____glewgetprogramiv 1>initshader.obj : error lnk2001: unresolved external symbol __imp____glewgetshaderiv 1>initshader.obj : error lnk2001: unresolved external symbol __imp____glewgetprograminfolog 1>initshader.obj : error lnk2001: unresolved external symbol __imp____glewcreateprogram 1>initshader.obj : error lnk2001: unresolved external symbol __imp____glewattachshader 1>c:\users\student\downloads\6e_example1_vc10\6e test\release\6e test.exe : fatal error lnk1120: 29 unresolved externals ========== build: 0 succeeded, 1 failed, 0 up-to-date, 0 skipped ==========
it looks me i've tried link in incompatible libraries, above you? complete source code try run (with windows 7) is
// two-dimensional sierpinski gasket // generated using randomly selected vertices , bisection #pragma comment(lib, "glew32.lib") #include "angel.h" const int numpoints = 5000; //---------------------------------------------------------------------------- void init( void ) { vec2 points[numpoints]; // specifiy vertices triangle vec2 vertices[3] = { vec2( -1.0, -1.0 ), vec2( 0.0, 1.0 ), vec2( 1.0, -1.0 ) }; // select arbitrary initial point inside of triangle points[0] = vec2( 0.25, 0.50 ); // compute , store n-1 new points ( int = 1; < numpoints; ++i ) { int j = rand() % 3; // pick vertex @ random // compute point halfway between selected vertex // , previous point points[i] = ( points[i - 1] + vertices[j] ) / 2.0; } // create vertex array object gluint vao; glgenvertexarrays( 1, &vao ); glbindvertexarray( vao ); // create , initialize buffer object gluint buffer; glgenbuffers( 1, &buffer ); glbindbuffer( gl_array_buffer, buffer ); glbufferdata( gl_array_buffer, sizeof(points), points, gl_static_draw ); // load shaders , use resulting shader program gluint program = initshader( "vshader21.glsl", "fshader21.glsl" ); gluseprogram( program ); // initialize vertex position attribute vertex shader gluint loc = glgetattriblocation( program, "vposition" ); glenablevertexattribarray( loc ); glvertexattribpointer( loc, 2, gl_float, gl_false, 0, buffer_offset(0) ); glclearcolor( 1.0, 1.0, 1.0, 1.0 ); // white background } //---------------------------------------------------------------------------- void display( void ) { glclear( gl_color_buffer_bit ); // clear window gldrawarrays( gl_points, 0, numpoints ); // draw points glflush(); } //---------------------------------------------------------------------------- void keyboard( unsigned char key, int x, int y ) { switch ( key ) { case 033: exit( exit_success ); break; } } //---------------------------------------------------------------------------- int main( int argc, char **argv ) { glutinit(&argc, argv); glutinitdisplaymode( glut_rgba ); glutinitwindowsize( 512, 512 ); // if using freeglut, next 2 lines check if // code 3.2. otherwise, comment them out glutinitcontextversion( 3, 1 ); glutinitcontextprofile( glut_core_profile ); glutcreatewindow( "sierpinski gasket" ); glewinit(); init(); glutdisplayfunc( display ); glutkeyboardfunc( keyboard ); glutmainloop(); return 0; } #pragma comment(lib, "glew32.lib") #include "angel.h" namespace angel { // create null-terminated string reading provided file static char* readshadersource(const char* shaderfile) { file* fp = fopen(shaderfile, "r"); if ( fp == null ) { return null; } fseek(fp, 0l, seek_end); long size = ftell(fp); fseek(fp, 0l, seek_set); char* buf = new char[size + 1]; fread(buf, 1, size, fp); buf[size] = '\0'; fclose(fp); return buf; } // create glsl program object vertex , fragment shader files gluint initshader(const char* vshaderfile, const char* fshaderfile) { struct shader { const char* filename; glenum type; glchar* source; } shaders[2] = { { vshaderfile, gl_vertex_shader, null }, { fshaderfile, gl_fragment_shader, null } }; gluint program = glcreateprogram(); ( int = 0; < 2; ++i ) { shader& s = shaders[i]; s.source = readshadersource( s.filename ); if ( shaders[i].source == null ) { std::cerr << "failed read " << s.filename << std::endl; exit( exit_failure ); } gluint shader = glcreateshader( s.type ); glshadersource( shader, 1, (const glchar**) &s.source, null ); glcompileshader( shader ); glint compiled; glgetshaderiv( shader, gl_compile_status, &compiled ); if ( !compiled ) { std::cerr << s.filename << " failed compile:" << std::endl; glint logsize; glgetshaderiv( shader, gl_info_log_length, &logsize ); char* logmsg = new char[logsize]; glgetshaderinfolog( shader, logsize, null, logmsg ); std::cerr << logmsg << std::endl; delete [] logmsg; exit( exit_failure ); } delete [] s.source; glattachshader( program, shader ); } /* link , error check */ gllinkprogram(program); glint linked; glgetprogramiv( program, gl_link_status, &linked ); if ( !linked ) { std::cerr << "shader program failed link" << std::endl; glint logsize; glgetprogramiv( program, gl_info_log_length, &logsize); char* logmsg = new char[logsize]; glgetprograminfolog( program, logsize, null, logmsg ); std::cerr << logmsg << std::endl; delete [] logmsg; exit( exit_failure ); } /* use program object */ gluseprogram(program); return program; } } // close namespace angel block
update
i changed code begin below , it's still not building , still build error.
#pragma comment(lib, "glew32.lib") #define glew_static 1 #include "angel.h" #include <gl\glew.h>
update 150529
i can build freeglut glut examples glut appears correctly installed vc, when doubleclick 1 of example builds says freeglut.dll not installed on system. still same compilation error when trying build angel's example. why? doing wrong? should do?
1>------ build started: project: 6e test, configuration: release win32 ------ 1> example1.cpp 1>c:\users\student\downloads\6e_example1_vc10\6e test\code\angel.h(65): warning c4305: 'initializing' : truncation 'double' 'const glfloat' 1>c:\users\student\downloads\6e_example1_vc10\6e test\code\mat.h(698): warning c4244: '=' : conversion 'double' 'glfloat', possible loss of data 1>c:\users\student\downloads\6e_example1_vc10\6e test\code\mat.h(699): warning c4244: '=' : conversion 'double' 'glfloat', possible loss of data 1>c:\users\student\downloads\6e_example1_vc10\6e test\code\mat.h(700): warning c4244: '=' : conversion 'double' 'glfloat', possible loss of data 1>c:\users\student\downloads\6e_example1_vc10\6e test\code\mat.h(721): warning c4244: '=' : conversion 'double' 'glfloat', possible loss of data 1>c:\users\student\downloads\6e_example1_vc10\6e test\code\mat.h(723): warning c4244: '=' : conversion 'double' 'glfloat', possible loss of data 1>c:\users\student\downloads\6e_example1_vc10\6e test\code\mat.h(726): warning c4244: '=' : conversion 'double' 'glfloat', possible loss of data 1>c:\users\student\downloads\6e_example1_vc10\6e test\code\mat.h(742): warning c4244: '=' : conversion 'double' 'glfloat', possible loss of data 1> initshader.cpp 1>c:\users\student\downloads\6e_example1_vc10\6e test\code\angel.h(65): warning c4305: 'initializing' : truncation 'double' 'const glfloat' 1>c:\users\student\downloads\6e_example1_vc10\6e test\code\mat.h(698): warning c4244: '=' : conversion 'double' 'glfloat', possible loss of data 1>c:\users\student\downloads\6e_example1_vc10\6e test\code\mat.h(699): warning c4244: '=' : conversion 'double' 'glfloat', possible loss of data 1>c:\users\student\downloads\6e_example1_vc10\6e test\code\mat.h(700): warning c4244: '=' : conversion 'double' 'glfloat', possible loss of data 1>c:\users\student\downloads\6e_example1_vc10\6e test\code\mat.h(721): warning c4244: '=' : conversion 'double' 'glfloat', possible loss of data 1>c:\users\student\downloads\6e_example1_vc10\6e test\code\mat.h(723): warning c4244: '=' : conversion 'double' 'glfloat', possible loss of data 1>c:\users\student\downloads\6e_example1_vc10\6e test\code\mat.h(726): warning c4244: '=' : conversion 'double' 'glfloat', possible loss of data 1>c:\users\student\downloads\6e_example1_vc10\6e test\code\mat.h(742): warning c4244: '=' : conversion 'double' 'glfloat', possible loss of data 1>..\code\initshader.cpp(13): warning c4996: 'fopen': function or variable may unsafe. consider using fopen_s instead. disable deprecation, use _crt_secure_no_warnings. see online details. 1> c:\program files (x86)\microsoft visual studio 11.0\vc\include\stdio.h(218) : see declaration of 'fopen' 1>example1.obj : error lnk2001: unresolved external symbol __imp____glewbindbuffer 1>example1.obj : error lnk2001: unresolved external symbol __imp____glewvertexattribpointer 1>example1.obj : error lnk2001: unresolved external symbol __imp__glewinit@0 1>example1.obj : error lnk2001: unresolved external symbol __imp____glewgenvertexarrays 1>example1.obj : error lnk2001: unresolved external symbol __imp____glewuseprogram 1>example1.obj : error lnk2001: unresolved external symbol __imp____glewbufferdata 1>example1.obj : error lnk2001: unresolved external symbol __imp____glewbindvertexarray 1>example1.obj : error lnk2001: unresolved external symbol __imp____glewgetattriblocation 1>example1.obj : error lnk2001: unresolved external symbol __imp____glewgenbuffers 1>example1.obj : error lnk2001: unresolved external symbol __imp____glewenablevertexattribarray 1>initshader.obj : error lnk2001: unresolved external symbol __imp____glewcreateshader 1>initshader.obj : error lnk2001: unresolved external symbol __imp____glewgetshaderinfolog 1>initshader.obj : error lnk2001: unresolved external symbol __imp____glewlinkprogram 1>initshader.obj : error lnk2001: unresolved external symbol __imp____glewcompileshader 1>initshader.obj : error lnk2001: unresolved external symbol __imp____glewshadersource 1>initshader.obj : error lnk2001: unresolved external symbol __imp____glewgetprogramiv 1>initshader.obj : error lnk2001: unresolved external symbol __imp____glewgetshaderiv 1>initshader.obj : error lnk2001: unresolved external symbol __imp____glewgetprograminfolog 1>initshader.obj : error lnk2001: unresolved external symbol __imp____glewcreateprogram 1>initshader.obj : error lnk2001: unresolved external symbol __imp____glewattachshader 1>c:\users\student\downloads\6e_example1_vc10\6e test\release\6e test.exe : fatal error lnk1120: 20 unresolved externals ========== build: 0 succeeded, 1 failed, 0 up-to-date, 0 skipped ==========
update
i tried asking again , still won't work:
you're missing glew (the opengl extension wrangler library). can link in following pragma somewhere in source code:
#pragma comment(lib, "glew32.lib")
or can modify linker flags in project settings. assumes have glew library installed. on system, installed @ following path:
c:\program files (x86)/microsoft visual studio 10.0/vc/lib/glew32.lib
the path may different on system, , there other ways of linking glew if don't want install it.
Comments
Post a Comment