[DJGPP] J'ai jamais vu ca!! (undefined reference)

J'ai jamais vu ca!! (undefined reference) [DJGPP] - Programmation

Marsh Posté le 14-11-2001 à 19:01:37    

Voici le code source qui marche
 
void draw_pixel(int x, int y, char c)
{
 char* videomem = (char*)0xA0000;
 videomem[x+y*320] = c;
}
 
int main(void)
{
 draw_pixel(10, 10, 10);
 while(1);
}
 
Quelqu'un peut me dire pourquoi ce code la ne marche pas?
 
void draw_pixel(int x, int y, char c);
 
int main(void)
{
 draw_pixel(10, 10, 10);
 while(1);
}
 
void draw_pixel(int x, int y, char c)
{
 char* videomem = (char*)0xA0000;
 videomem[x+y*320] = c;
}
 
Le linker me dit :  
(.eh_frame+0x11):main.cpp: undefined reference to `___gxx_personality_v0'

Reply

Marsh Posté le 14-11-2001 à 19:01:37   

Reply

Marsh Posté le 14-11-2001 à 20:18:02    

Essayes en n'écrivant que ça pour le prototype :
 
void draw_pixel(int, int, char);

Reply

Marsh Posté le 14-11-2001 à 22:08:19    

Naaaaaaaaaaaan ............ meme erreur  :sweat:

Reply

Marsh Posté le 14-11-2001 à 22:09:49    

Mais quand je change l'extension de mon fichier de cpp vers c la y'a plus d'erreur
Mais moi je veux programmer en C++ pas en C

Reply

Marsh Posté le 14-11-2001 à 22:30:59    

c original ça alors :??:
 
et si tu changes des options de compilation ? (genre optimisations, expansion en ligne... .etc...)

Reply

Marsh Posté le 14-11-2001 à 22:43:44    

Ben j'utilise djgpp et manifestement il décore les noms des fonctions quand il les met dans un fichier obj. Ca doit etre possible de désactiver ca! Ou alors, que le fichier ou on va référencer la fonction soit capable de retrouver la fonction dont le nom est décoré....
Malheureusement y'a aucune option concernant ca

Reply

Marsh Posté le 14-11-2001 à 22:44:19    

Y'a quand meme bien quelqu'un sur HFR qui compile du code C++ répandu sur plusieurs avec DJGPP quand meme!

Reply

Marsh Posté le 15-11-2001 à 00:30:11    

si tu veux ke la decoration disparaisse, tu prefixe ta declaration de fonction par un zoli extern "C" (j'espere seulement ke c'est pas du MS specific :D vu ke sous win, j'utilise ke visual, les makefiles et la ligne de commande ca gonfle profond à la longue)
 
Exemple:
extern "C"
{
void  draw_pixel(int x, int y, char c);
}

Reply

Marsh Posté le 15-11-2001 à 10:56:45    

oui, le extern "C" marche, mais ça enlève un _ devant. (je faisait ça ozi avec le watcomC pour mes routines en ASM)

Reply

Marsh Posté le 15-11-2001 à 13:51:50    

Le probleme est ici a mon avis:
 
>draw_pixel(10, 10, 10);
 
le compilo c++ en deduit que quelque part, tu vas definir une fonction draw_pixel(int, int, int) et de ce fait, il ne considere pas que ton proto precedent (ni la def de la fonction) correspond a cette fonction, car c'est un draw_pixel(int, int, char).
 
un draw_pixel(10, 10, (char) 10);
devrait resoudre le pb, non?
 
Notes que je vois pas a priori ce qui fait que celle qui marchait n' avait pas le meme probleme.
 
A+,


---------------
There's more than what can be linked! --    Iyashikei Anime Forever!    --  AngularJS c'est un framework d'engulé!  --
Reply

Marsh Posté le 15-11-2001 à 13:51:50   

Reply

Marsh Posté le 15-11-2001 à 17:59:49    

Ben c pas con, et j'y avais pensé
J'avais meme fait : draw_pixel((int)10, (int)10, (char)10);
ca marche pas non plus
je crois que je vais générer mes fichiers obj avec borland pour ensuite pouvoir les lier avec ld de djgpp (pour générer un fichier binaire)

Reply

Marsh Posté le 15-11-2001 à 19:54:42    

Ace17 a écrit a écrit :

Ben j'utilise djgpp et manifestement il décore les noms des fonctions quand il les met dans un fichier obj. Ca doit etre possible de désactiver ca! Ou alors, que le fichier ou on va référencer la fonction soit capable de retrouver la fonction dont le nom est décoré....
Malheureusement y'a aucune option concernant ca  




Comme tout compilo C++, c'est normal. mais si tous tes .obj ont ete compiles avec le meme compilo, et si ton linker est celui fourni avec ton compilo, ca ne devrait pas poser de probleme.
Par contre, vouloir linker des modules c++ compiles avec des compilos differents, c' est s' exposer aux pires problemes, et je sais de quoi je parle, car je m' escrime a faire ca pour un meme source entre gcc et les compilos natifs a 3 OS Unix (reeussi pour Solaris et HP-UX, ca merde encore pour Aix).
A+,


---------------
There's more than what can be linked! --    Iyashikei Anime Forever!    --  AngularJS c'est un framework d'engulé!  --
Reply

Marsh Posté le 15-11-2001 à 19:58:58    

Notes que ca peut aussi etre un pb avec ta version de gcc, cf le lien suivant: http://archive.linuxfromscratch.or [...] /0798.html
J' ai teste ton source avec le compilo microsoft, il n' y a aucun pb. les deux versions passent sans erreur.
 
A+,

 

[edtdd]--Message édité par gilou--[/edtdd]


---------------
There's more than what can be linked! --    Iyashikei Anime Forever!    --  AngularJS c'est un framework d'engulé!  --
Reply

Marsh Posté le 15-11-2001 à 20:06:38    

Au fait,  
>int main(void)
mais ta fonction ne retourne pas de valeur.
Ca non plus, un compilo C++ ne devrait pas aimer.
A+,


---------------
There's more than what can be linked! --    Iyashikei Anime Forever!    --  AngularJS c'est un framework d'engulé!  --
Reply

Marsh Posté le 15-11-2001 à 22:26:33    

ouais ouais c'est encore autre chose ca
bon j'ai trouvé la combine : j'utilise le compilo ms et y'a plus de problemes; mais je garde le linker de djgpp

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed