Error LNK2019 visual studio C++

Fermé
star2 - 13 nov. 2010 à 19:00
 star2 - 13 nov. 2010 à 19:59
Bonjour à toutes et à tous,

cela fai un bon moment que je cherche une solution à mon problème mai en vain.. et ca commence à devenir plus urgent.

j'ai convertit quelques modeles .3DS en utilisant deep exlploration en code source opengl C++, quand je compile sous visual studio 2008 j'obtient la liste des erreurs suivant :

Erreur 1 error LNK2019: symbole externe non résolu __imp__glMaterialfv@12 référencé dans la fonction "void __cdecl MyMaterial(unsigned int,float *,float)" (?MyMaterial@@YAXIPAMM@Z) doly.obj dolph
Erreur 2 error LNK2019: symbole externe non résolu __imp__glBegin@4 référencé dans la fonction "void __cdecl SelectMaterial(int)" (?SelectMaterial@@YAXH@Z) doly.obj dolph
Erreur 3 error LNK2019: symbole externe non résolu __imp__glMaterialf@12 référencé dans la fonction "void __cdecl SelectMaterial(int)" (?SelectMaterial@@YAXH@Z) doly.obj dolph
Erreur 4 error LNK2019: symbole externe non résolu __imp__glEnd@0 référencé dans la fonction "void __cdecl SelectMaterial(int)" (?SelectMaterial@@YAXH@Z) doly.obj dolph
Erreur 5 error LNK2019: symbole externe non résolu __imp__glEndList@0 référencé dans la fonction "int __cdecl Gen3DObjectList(void)" (?Gen3DObjectList@@YAHXZ) doly.obj dolph
Erreur 6 error LNK2019: symbole externe non résolu __imp__glVertex3f@12 référencé dans la fonction "int __cdecl Gen3DObjectList(void)" (?Gen3DObjectList@@YAHXZ) doly.obj dolph
Erreur 7 error LNK2019: symbole externe non résolu __imp__glTexCoord2f@8 référencé dans la fonction "int __cdecl Gen3DObjectList(void)" (?Gen3DObjectList@@YAHXZ) doly.obj dolph
Erreur 8 error LNK2019: symbole externe non résolu __imp__glNormal3f@12 référencé dans la fonction "int __cdecl Gen3DObjectList(void)" (?Gen3DObjectList@@YAHXZ) doly.obj dolph
Erreur 9 error LNK2019: symbole externe non résolu __imp__glNewList@8 référencé dans la fonction "int __cdecl Gen3DObjectList(void)" (?Gen3DObjectList@@YAHXZ) doly.obj dolph
Erreur 10 error LNK2019: symbole externe non résolu __imp__glGenLists@4 référencé dans la fonction "int __cdecl Gen3DObjectList(void)" (?Gen3DObjectList@@YAHXZ) doly.obj dolph
Erreur 11 error LNK2019: symbole externe non résolu _main référencé dans la fonction ___tmainCRTStartup MSVCRTD.lib dolph
Erreur 12 fatal error LNK1120: 11 externes non résolus C:\Documents and Settings\Administrateur\Bureau\TP_infographie\dolph\Debug\dolph.exe dolph

j'ai essayer de compiler different models convertis , et c'est toujour ces erreur de "LNK 2019" qui apparaissent .
j'ai trouver quelques propositions qui disent que la configuration du link de VS 2008 doit etre changer.. je les ai po bien compri .. mai je les ai essayé et ca ne resoud pas le probleme ..

priere de m'aider, j'en ai besoin.
A voir également:

5 réponses

KX Messages postés 16733 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 31 janvier 2024 3 015
13 nov. 2010 à 19:12
En gros tu as quelque part dans ton code un appel à une fontion que tu as déclarée mais non implémentée.

Exemple :

void maFonction(); // déclarée mais jamais implémentée

int main()
{
	maFonction(); // error LNK2019: symbole externe non résolu
                      // "void __cdecl maFonction(void)" (?maFonction@@YAXXZ)
                      // référencé dans la fonction _main
	return 0;
}

Aide toi du message d'erreur et cherche dans ton code, où se trouvent les appels aux fonctions qui posent problème et regarde où est l'implémentation manquante (probablement dans un header que tu n'as pas inclus au projet)
2
merci, mai enfaite toutes les fonctions que j'utilise sont définies dans le meme fichier source, et elle sont toutes appellées aprés leurs definitions.

je ne suis pas vraiment sur de ce que tu veux dire par inclure des header dans mon projet, mai si tu parle des include , je fai appel à 3 lib :
#include <windows.h>
#include <GL\gl.h>
#include <GL\glu.h>
2
KX Messages postés 16733 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 31 janvier 2024 3 015
Modifié par KX le 13/11/2010 à 19:28
Mais il n'est pas exclu que "GL\gl.h" et "GL\glu.h" fassent juste les déclarations sans implémenter !

Pour commencer, regarde la 1ère erreur :

Erreur 1 error LNK2019: symbole externe non résolu __imp__glMaterialfv@12 référencé dans la fonction "void __cdecl MyMaterial(unsigned int,float *,float)" (?MyMaterial@@YAXIPAMM@Z) doly.obj dolph

Dans le fichier doly.cpp, tu as une fonction void MyMaterial(unsigned int,float *,float) qui appelle glMaterialfv. Regarde où est déclarée MyMaterial (probablement dans un des headers GL), tu verras qu'elle n'est pas implémentée !
0
je pense que ce n'est pas le cas
bon voila la partie de mon fichier source qui contient les declarations des fonctions:

void MyMaterial(GLenum mode,GLfloat *f,GLfloat alpha)
{
GLfloat d[4];
d[0]=f[0];
d[1]=f[1];
d[2]=f[2];
d[3]=alpha;
glMaterialfv (GL_FRONT_AND_BACK,mode,d);
}
/*
* SelectMaterial uses OpenGL commands to define facet colors.
*
* Returns:
* Nothing
*/

void SelectMaterial(int i)
{
//
// Define the reflective properties of the 3D Object faces.
//
glEnd();
GLfloat alpha=materials[i].alpha;
MyMaterial (GL_AMBIENT, materials[i].ambient,alpha);
MyMaterial (GL_DIFFUSE, materials[i].diffuse,alpha);
MyMaterial (GL_SPECULAR, materials[i].specular,alpha);
MyMaterial (GL_EMISSION, materials[i].emission,alpha);
glMaterialf (GL_FRONT_AND_BACK,GL_SHININESS,materials[i].phExp);
glBegin(GL_TRIANGLES);

};

int main( int argc, char *argv[])
{

int i;
int j;

GLint lid=glGenLists(1);
int mcount=0;
int mindex=0;
glNewList(lid, GL_COMPILE);

glBegin (GL_TRIANGLES);
for(i=0;i<sizeof(face_indicies)/sizeof(face_indicies[0]);i++)
{
if(!mcount)
{
SelectMaterial(material_ref[mindex][0]);
mcount=material_ref[mindex][1];
mindex++;
}
mcount--;
for(j=0;j<3;j++)
{
int vi=face_indicies[i][j];
int ni=face_indicies[i][j+3];//Normal index
int ti=face_indicies[i][j+6];//Texture index
glNormal3f (normals[ni][0],normals[ni][1],normals[ni][2]);
glTexCoord2f(textures[ti][0],textures[ti][1]);
glVertex3f (vertices[vi][0],vertices[vi][1],vertices[vi][2]);
}
}
glEnd ();

glEndList();
return 0;
}

peut etre que ca eclaircie un peu le probleme ...
1
KX Messages postés 16733 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 31 janvier 2024 3 015
Modifié par KX le 13/11/2010 à 19:49
Il n'est cependant pas évident, que les fonctions suivantes soient implémentés quelque part :

glMaterialfv (GL_FRONT_AND_BACK,mode,d);   
glMaterialf (GL_FRONT_AND_BACK,GL_SHININESS,materials[i].phExp);  
glBegin(GL_TRIANGLES); 
GLint lid=glGenLists(1); 
glNewList(lid, GL_COMPILE);  
glBegin (GL_TRIANGLES); 
glNormal3f (normals[ni][0],normals[ni][1],normals[ni][2]);  
glTexCoord2f(textures[ti][0],textures[ti][1]);  
glVertex3f (vertices[vi][0],vertices[vi][1],vertices[vi][2]); 

Regarde dans tes headers "GL\gl.h" et "GL\glu.h" les lignes correspondantes à ces fonctions.
Il n'y aura pas d'implémentation (ce n'est pas le but d'un header).
Il te faut les fichiers d'implémentation ("gl.c" et "glu.c" ou éventuellement "gl.a" et "glu.a")
0
c'est bon merci , j'ai resolu le probleme des erreurs "LNK2019",
il manquait un t dans le #include<GL\glut.h> :D:D

maintenant j'ai un autre petit probleme ... c'est que le programme n'affiche aucun resultat .. juste une fenetre console qui disparait dans qq secondes .

mai bon merci en ts cas ^^.
1
KX Messages postés 16733 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 31 janvier 2024 3 015
13 nov. 2010 à 19:51
rajoute system("PAUSE"); avant return 0; dans ton main
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
ca marche avec system("PAUSE"); pour arreter l'affichage de la fenetre console ...
mai ce n'est pas vraiment ce qui m'interesse . normalement c'est une fenetre contenant l'objet 3D dessiné qui doi apparaitre .. donc je pense que je doi essayer de bien comprendre le code pour voir ce qui ne marche pas .

cordialement .
1