Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
850 connectés 

  FORUM HardWare.fr
  Programmation

  Compilation GCC + Assemblage NASM, foirage au linkage LD

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

Compilation GCC + Assemblage NASM, foirage au linkage LD

n°105237
Ace17
Posté le 26-02-2002 à 20:25:06  profilanswer
 

Voici mes fichiers :
 
Test.c :  
 
void MyFunction();
 
void main()
{
 MyFunction();
}
 
Try.asm :  
global _MyFunction
 
_MyFunction:
 push eax
 pop ebx
 ret
 
 
Je compile les deux et j'obtiens deux fichiers au format COFF.
Lorsque je les linke, j'obtiens le message d'erreur suivant :
 
test.obj(.text+0x11):test.c: undefined reference to `_MyFunction'
 
C'est pas normal ca! Quelqu'un peut m'expliquer?

mood
Publicité
Posté le 26-02-2002 à 20:25:06  profilanswer
 

n°105238
youdontcar​e
Posté le 26-02-2002 à 20:26:20  profilanswer
 

plutôt qq chose comme
 
extern void MyFunction();

n°105242
Ace17
Posté le 26-02-2002 à 20:31:16  profilanswer
 

Non, non c'est la meme chose. A ma connaissance y'a jamais vraiment eu de différence entre une fonction déclarée extern ou pas. Et le linker vient de me le confirmer...
D'autres suggestions?  :hello:

n°105280
Ace17
Posté le 26-02-2002 à 21:40:27  profilanswer
 

Je viens de constater un résultat intéressant :  
 
Voici mes fichiers cette fois :
 
File1.cpp
void Function1();
 
int main()
{
 int a;
 a = 10;
 
 Function1();
 
 return 0;
}
 
File2.cpp
void Function1()
{
 int a = 3;
 a = a * 3;
}
 
A la compilation, j'obtiens :
undefined reference to '___gxx_personality_v0'
 
Mais ce qui est curieux c'est que quand je change dans File2.Cpp Function1 en Function2, j'obtiens EN PLUS le message :
undefined reference to `__Z9Function1v'
 
La question que je pose donc est, qu'est-ce que c'est donc que ce __gxx_personality_v0?

n°105373
HelloWorld
Salut tout le monde!
Posté le 27-02-2002 à 00:15:41  profilanswer
 

Pfff ... LD, il m'a bien fait chier moi aussi. Mais pas longtemps, je l'ai vite gerclé (GCC for Win32). Le même code compilait impec sous Linux et me sortait des erreurs hallucinogène comme toi sous Windows, quand il plantait pas lamentablement ...


---------------
FAQ fclc++ - FAQ C++ - C++ FAQ Lite
n°105374
HelloWorld
Salut tout le monde!
Posté le 27-02-2002 à 00:17:28  profilanswer
 

Apparement t'es pas le seul ...
http://www.google.com/search?q=__g [...] Google&lr=


---------------
FAQ fclc++ - FAQ C++ - C++ FAQ Lite
n°105375
HelloWorld
Salut tout le monde!
Posté le 27-02-2002 à 00:20:47  profilanswer
 

Re moi :D
Ca vient apparement du C++ ... Essai ce code avec l'extension .c pour en être sûr ...
http://gcc.gnu.org/cgi-bin/gnatswe [...] tabase=gcc
 
__gxx_personality_v0 is defined in a library, like fopen and strcmp and cout
 and malloc and....  If you link your program in addition to just compiling
 it, the external symbols will be resolved.  Since you are writing C++,
 we recommend you use g++ (or c++) to do the linking step, rather than gcc


---------------
FAQ fclc++ - FAQ C++ - C++ FAQ Lite
n°105412
BENB
100% Lux.
Posté le 27-02-2002 à 09:21:27  profilanswer
 

Ace17 a écrit a écrit :

Je viens de constater un résultat intéressant :  
 
Voici mes fichiers cette fois :
 
File1.cpp
void Function1();
 
int main()
{
 int a;
 a = 10;
 
 Function1();
 
 return 0;
}
 
File2.cpp
void Function1()
{
 int a = 3;
 a = a * 3;
}
 
A la compilation, j'obtiens :
undefined reference to '___gxx_personality_v0'
 
Mais ce qui est curieux c'est que quand je change dans File2.Cpp Function1 en Function2, j'obtiens EN PLUS le message :
undefined reference to `__Z9Function1v'
 
La question que je pose donc est, qu'est-ce que c'est donc que ce __gxx_personality_v0?  




Quand on linke du C++ on utilise le compilo qui lui appelle le linker... si tu choisis d'appeler directement le linker ne t'etonnes pas s'il manque des fct ou des libs...
 
De plus pour gerer la surcharge le C++ decore les nons de fonctions, ces decoration indiquent les types des arguments de la fonction...  Ils ne sont pas standardises et chaque compilo est libre d'utiliser les siens, il n'y a donc aucune chance de pouvoir linker des .o venant de plusieurs compilo differents...
 
pour linker de l'asm et de C++ il faut alors utiliser le C
extern "C" ....
pour indiquer de ne pas decorer le nom de la fct...

n°105548
Ace17
Posté le 27-02-2002 à 13:50:46  profilanswer
 

Oui mais moi je veux faire du C++!  ;)  
J'aime pas certains trucs dans la syntaxe du C. Mais j'ai trouvé comment faire, pour ceux qui seraient intéressés voici la procédure (trouvée par tatonnement, mais ca marche):
 
gpp -w -fno-rtti -c -nostdlib -fno-builtin -fno-exceptions main.cpp
 
gpp -w -fno-rtti -c -nostdlib -fno-builtin -fno-exceptions file1.cpp
 
gpp -w -fno-rtti -c -nostdlib -fno-builtin -fno-exceptions file2.cpp
 
ld -nostdlib -fno-builtin -fno-exceptions --oformat binary -Ttext 0x00100000 main.o file1.o file2.o

n°105601
BENB
100% Lux.
Posté le 27-02-2002 à 15:11:59  profilanswer
 

Ace17 a écrit a écrit :

Oui mais moi je veux faire du C++!  ;)  
...



 
ben utilise g++
et linke avec g++
et tu n'aurra plus de Pb...
 
et tes fct en asm tu ajoutes
extern 'C' devant...

mood
Publicité
Posté le 27-02-2002 à 15:11:59  profilanswer
 

n°105607
Ace17
Posté le 27-02-2002 à 15:23:31  profilanswer
 

Ouais ouais merci!  :)  
Mais j'avais trouvé, mon dernier message était juste pour cloturer le topic en donnant la solution, puisqu'apparament gt pas le seul a avoir eu ce probleme


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation

  Compilation GCC + Assemblage NASM, foirage au linkage LD

 

Sujets relatifs
pb de linkage en C++ sous visual ki marche sous mandrake HELP !!!Compilation de quake 3, le "hello world " marche pas.... help!!
[Visual C++] / problème de linkage...[lex/yacc] compilation
probleme de compilation opengl sous linux[C++]Compilation séparé, DEV C++
java : probleme de creation du .bat de compilation et d'execution[JAVA] helllp a la compilation
[JAVA] Probleme à la compilation ...[C - Linux] Compilation avec ncurses
Plus de sujets relatifs à : Compilation GCC + Assemblage NASM, foirage au linkage LD


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR