Problème avec textures

drummaniac Messages postés 29 Date d'inscription samedi 11 mars 2006 Statut Membre Dernière intervention 13 décembre 2011 - 26 mai 2009 à 12:34
cs_rt15 Messages postés 3874 Date d'inscription mardi 8 mars 2005 Statut Modérateur Dernière intervention 7 novembre 2014 - 10 juin 2009 à 16:36
Salut à tous!

Je vous explique mon problème, j'essaie (en vain) d'appliquer des textures en OpenGL avec DevCpp à l'aide du site du zéro.
Problème, je lance mon programme, qui fonctionne, j'ajoute l'include sdlglutils.h comme indiqué sur le site. Et je déclare GLuint identifiant_texture = loadTexture("ROCK.bmp"), par la suite.

Et là ça coince!   Erreurs : [Linker error] undefined reference to `loadTexture(char const*, bool)'
                                        [Linker error] undefined reference to `WinMain@16'

Qu'est ce que je peux faire? Est ce que je n'ai pas les bons Linker?

Merci à tous

27 réponses

cs_rt15 Messages postés 3874 Date d'inscription mardi 8 mars 2005 Statut Modérateur Dernière intervention 7 novembre 2014 13
4 juin 2009 à 13:46
Salut,

Erreurs : [Linker error] undefined reference to `loadTexture(char const*, bool)'

Il doit te manquer une librairie en entrée du lieur. Quelque part dans les options du projet sous dev-cpp, il doit y avoir un endroit où tu peux ajouter des libs. La librairie manquante doit être associée à sdlglutils, donc tu l'as probablement téléchargée au même moment, elle a un nom similaire ou je sais pas quoi...

Linker error] undefined reference to `WinMain@16'

Ca, c'est que le linker a un souci avec le point d'entrée de ton programme. Tu as un "main" ? Si oui, c'est que ton appli est une application fenêtrée. il te faut alors définir un WinMain en lieu et place du main, comme ça.
0
drummaniac Messages postés 29 Date d'inscription samedi 11 mars 2006 Statut Membre Dernière intervention 13 décembre 2011
4 juin 2009 à 14:35
Merci beaucoup! Je venais juste de trouver! Mais au moins, j'ai compris à quoi correspond 'WinMain@16'

En fait, maintenant, je suis confronté à un autre problème, j'ai ajouté des bibliothèque etc..., donc SDL_image,

Et lorsque je compile, j'ai des nouvelles erreurs de linkage,
  [Linker error] undefined reference to `SDL_ConvertSurface'
  [Linker error] undefined reference to `SDL_FreeSurface'
  [Linker error] undefined reference to `SDL_CreateRGBSurface'
  [Linker error] undefined reference to `SDL_LockSurface'
  [Linker error] undefined reference to `SDL_UnlockSurface'
  [Linker error] undefined reference to `SDL_RWFromFile'
  [Linker error] undefined reference to `SDL_SaveBMP_RW'
  [Linker error] undefined reference to `SDL_GetVideoInfo'  etc....

Donc maintenant, c'est la galère! Je pense que c'est encore une histoire de librairies, mais je ne sais pas laquelle!
0
cs_rt15 Messages postés 3874 Date d'inscription mardi 8 mars 2005 Statut Modérateur Dernière intervention 7 novembre 2014 13
4 juin 2009 à 14:40
D'après eux c'est la librairie SDL, tout simplement.
Il demande d'utiliser -lSDL -> option -l pou lier avec la librairie SDL.
0
drummaniac Messages postés 29 Date d'inscription samedi 11 mars 2006 Statut Membre Dernière intervention 13 décembre 2011
4 juin 2009 à 15:23
Merci!

Maintenant, voilà le retour de du vilain :   [Linker error] undefined reference to `WinMain@16'

J'ai essayé avec ton précédent lien, et je ne suis pas sûr de bien comprendre, il faut que je remplace mon main par ce WinMain?
0

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

Posez votre question
cs_rt15 Messages postés 3874 Date d'inscription mardi 8 mars 2005 Statut Modérateur Dernière intervention 7 novembre 2014 13
4 juin 2009 à 16:48
Oui.
0
drummaniac Messages postés 29 Date d'inscription samedi 11 mars 2006 Statut Membre Dernière intervention 13 décembre 2011
5 juin 2009 à 15:22
Hi!

J'ai un gros problème avec ce WinMain, je n'arrive pas  à réinitialiser tout ce que faisait mon main d'origine, et de plus, même avec windows.h, il ne connait pas toutes les fonctions du liens que tu m'as donné.
J'ai enlevé pas mal de chose de mon main, pour le poster, qql pourrait il me dire les modifications à apporter pour que ça passe dans le WinMain svp?!

int
main(int argc, char *argv[])
{
    glutInit(&argc, argv);
    glutInitWindowSize(640,480);
    glutInitWindowPosition(10,10);
    glutInitDisplayMode(GLUT_RGB | GLUT_DOUBLE | GLUT_DEPTH);

    glutCreateWindow("Texture Test");

    glutReshapeFunc(resize);
    glutDisplayFunc(display);
    glutKeyboardFunc(key);
    glutIdleFunc(idle);

    glClearColor(1,1,1,1);
    glEnable(GL_CULL_FACE);
    glCullFace(GL_BACK);

    glEnable(GL_DEPTH_TEST);
    glDepthFunc(GL_LESS);

    glEnable(GL_LIGHT0);
    glEnable(GL_NORMALIZE);
    glEnable(GL_COLOR_MATERIAL);
    glEnable(GL_LIGHTING);

    glLightfv(GL_LIGHT0, GL_AMBIENT,  light_ambient);
    glLightfv(GL_LIGHT0, GL_DIFFUSE,  light_diffuse);
    glLightfv(GL_LIGHT0, GL_SPECULAR, light_specular);
    glLightfv(GL_LIGHT0, GL_POSITION, light_position);

    glMaterialfv(GL_FRONT, GL_AMBIENT,   mat_ambient);
    glMaterialfv(GL_FRONT, GL_DIFFUSE,   mat_diffuse);
    glMaterialfv(GL_FRONT, GL_SPECULAR,  mat_specular);
    glMaterialfv(GL_FRONT, GL_SHININESS, high_shininess);

    glutMainLoop();

    return EXIT_SUCCESS;
}

Si déjà je pouvais faire fonctionner ça, se serait cool!
//Dsl pour ce post pourri de code, mais je savais pas comment le faire de façon classe
0
cs_rt15 Messages postés 3874 Date d'inscription mardi 8 mars 2005 Statut Modérateur Dernière intervention 7 novembre 2014 13
5 juin 2009 à 15:36
Erf.. On dirait que glutInit attend vraiment un main.

A ta place je compilerai en mode application console. Tu auras une console qui sert à rien ou pas grand chose, mais ça te permettra au moins d'avancer.
0
drummaniac Messages postés 29 Date d'inscription samedi 11 mars 2006 Statut Membre Dernière intervention 13 décembre 2011
5 juin 2009 à 15:48
Je ne sais pas si j'ai fais ce que tu m'a conseillé, mais j'ai crée une nouvelle appli console sous, Dev, j'ai rajouter mes lib de link, ect... Et au final, j'ai toujours la même erreur,   [Linker error] undefined reference to `WinMain@16'

Est ce que ça pourrait venir de mauvaises librairies de link?
Voilà avec quoi il fait le linkage:

-lglut32 -lglu32 -lopengl32 -lwinmm -lgdi32
C:/Dev-Cpp/lib/libSDLmain.a
C:/Dev-Cpp/lib/libopengl32.a
C:/Dev-Cpp/lib/libglu32.a
C:/Dev-Cpp/lib/libglut32.a
C:/Dev-Cpp/lib/libwin32k.a
C:/Dev-Cpp/lib/libwin32spl.a
C:/Dev-Cpp/lib/libmingw32.a
C:/Dev-Cpp/lib/libSDL_Image.a
C:/Dev-Cpp/lib/libdxguid.a
C:/Dev-Cpp/lib/libuser32.a
C:/Dev-Cpp/lib/libSDL.dll.a
0
cs_rt15 Messages postés 3874 Date d'inscription mardi 8 mars 2005 Statut Modérateur Dernière intervention 7 novembre 2014 13
5 juin 2009 à 15:55
Nan ça à l'air bien.
Je te conseille de passer à Code::Blocks, libre aussi, mais qui continue d'évoluer.
Dev-Cpp, me souviens plus comment switcher console/windows.

Essaie de mettre _CONSOLE dans les définitions de préprocesseur, et vire un éventuel _WINDOWS déjà en place.
0
drummaniac Messages postés 29 Date d'inscription samedi 11 mars 2006 Statut Membre Dernière intervention 13 décembre 2011
5 juin 2009 à 16:17
J'ai pas le choix, je peux utiliser que DevCpp ici!
J'ai tenté le #define _CONSOLE sur mon main.cpp, et toujours pareil....
0
cs_rt15 Messages postés 3874 Date d'inscription mardi 8 mars 2005 Statut Modérateur Dernière intervention 7 novembre 2014 13
5 juin 2009 à 16:32
Déprimant ton histoire.

Il faut vraiment le définir tôt... Pas dans le code. Et je suis même pas sûr que ça suffise.

Autre solution...
Fait un include de windows.h.

Remplace ton main par un WinMain.
Passe des arguments vides à gluInit :

  int argc;
  char** argv;

  argc = 0;
  argv = NULL;
  glutInit(&argc, argv);

Tu pourrais aussi construire argc et argv plus proprement à partir du lpCommandLine de WinMain.
0
drummaniac Messages postés 29 Date d'inscription samedi 11 mars 2006 Statut Membre Dernière intervention 13 décembre 2011
5 juin 2009 à 17:14
ahhh! Petite avancée! Mon prog passe le linkage en passant des arguments vides, mais autre soucis,
il me dis que SDL_image.dll est introuvable, et il plante...

Je me suis peut être (même surement) trompé, je l'ai ajouté au linkage. Où est ce que je dois l'ajouter?

Je suis d'accord c'est vraiment déprimant, à coté je crée une application qui génère des textures à partir de bases de données, ça marche mieux!
0
cs_rt15 Messages postés 3874 Date d'inscription mardi 8 mars 2005 Statut Modérateur Dernière intervention 7 novembre 2014 13
5 juin 2009 à 17:35
Pour utiliser une .dll, il faut inclure un .h pour la compilation, mettre un .lib en entrée du lieur pour le link, et finalement, pour l'exécution mettre la dll dans, au choix :
Le répertoire du .exe.
Le répertoire courant.
Un répertoire dans la variable PATH.
...

Il faudra que tu fournisse la dll avec ton .exe si tu distribue ton appli.
0
drummaniac Messages postés 29 Date d'inscription samedi 11 mars 2006 Statut Membre Dernière intervention 13 décembre 2011
8 juin 2009 à 12:35
J'ai essayé de rajouter les dll à mon projet. Dès qu'il plantait, il me disait que ça venait de xxxx.dll, donc je les ai toutes rajoutées.
Mais maintenant, à l'execution du programme, il plante directement.... Là je ne vois pas du tout de quoi ça peut venir...
0
cs_rt15 Messages postés 3874 Date d'inscription mardi 8 mars 2005 Statut Modérateur Dernière intervention 7 novembre 2014 13
8 juin 2009 à 14:04
Message d'erreur ?

"directement" -> si tu mets un printf (Ou une MessageBox si tu n'as pas de console) au début du main, tu le vois ou pas ?

Tu as essayer de déboguer (Points d'arrêt, pas à pas...) Plus d'explications ici par exemple, à la fin.
0
drummaniac Messages postés 29 Date d'inscription samedi 11 mars 2006 Statut Membre Dernière intervention 13 décembre 2011
8 juin 2009 à 15:00
J'ai essayé le débogage, il plante dès le début!

J'envisage peut être de laisser cette méthode.
Est ce que tu aurais une autre façon d'appliquer les textures? Parce que tout ça c'est depuis que j'ai essayé d'en appliquer, avant aucuns soucis. Et comme je vais implanter mon programme après sous Builder, je voudrai trouver un truc assez simple!
0
cs_rt15 Messages postés 3874 Date d'inscription mardi 8 mars 2005 Statut Modérateur Dernière intervention 7 novembre 2014 13
8 juin 2009 à 15:04
Ca veut dire quoi "appliquer les textures", ou plutôt, sur quoi applique tu tes textures ?
0
drummaniac Messages postés 29 Date d'inscription samedi 11 mars 2006 Statut Membre Dernière intervention 13 décembre 2011
8 juin 2009 à 15:09
Je veux dire appeler un fichier .bmp ou .jpg pour le "coller" à une sphère par exemple ou à un cube pour lui donner un autre aspect qu'une couleur. Comme un quadrilatère sur lequel on applique une certaine texture pour lui faire ressembler à un mur.
0
cs_rt15 Messages postés 3874 Date d'inscription mardi 8 mars 2005 Statut Modérateur Dernière intervention 7 novembre 2014 13
8 juin 2009 à 15:23
Dans ce cas tu es "obligé" de passer par une librairie comme tu l'as fait, que ce soit en utilisant OpenGL ou DirectX.

Mais je suis pas sûr qu'il soit plus facile de se mettre à DirectX que de se mettre à OpenGL (Surtout avec Dev-Cpp...)

Tu as essayé la MessageBox ?

int
main(int argc, char *argv[])
{
    MessageBox(NULL, "Kikoo", "lol", MB_OK);
    glutInit(...);

Avec une include de windows.h.
Pour savoir si le problème se fait avant l'entrée du main.

C++ Builder est aussi un vieux produit (Je suppose que tu as une version 6) mais à côté de Dev-Cpp, il est quand même plus à l'aise pour le débogage. De plus tu dois pouvoir trouver des composants pour t'aider.

Tuto OpenGL pour C++ Builder ici.
0
cs_rt15 Messages postés 3874 Date d'inscription mardi 8 mars 2005 Statut Modérateur Dernière intervention 7 novembre 2014 13
8 juin 2009 à 15:35
Par exemple, pour de la 3D pour les nuls, tu as GLScene que tu peux installer sous Builder.
0
Rejoignez-nous