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

 


Dernière réponse
Sujet : Compilation GCC + Assemblage NASM, foirage au linkage LD
Ace17 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

Votre réponse
Nom d'utilisateur    Pour poster, vous devez être inscrit sur ce forum .... si ce n'est pas le cas, cliquez ici !
Le ton de votre message                        
                       
Votre réponse


[b][i][u][strike][spoiler][fixed][cpp][url][email][img][*]   
 
   [quote]
 

Options

 
Vous avez perdu votre mot de passe ?


Vue Rapide de la discussion
Ace17 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
BENB

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...

Ace17 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
BENB

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...

HelloWorld 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
HelloWorld Apparement t'es pas le seul ...
http://www.google.com/search?q=__g [...] Google&lr=
HelloWorld 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 ...
Ace17 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?
Ace17 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:
youdontcare plutôt qq chose comme
 
extern void MyFunction();
Ace17 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?

Copyright © 1997-2025 Groupe LDLC (Signaler un contenu illicite / Données personnelles)