Interfacer C et ASM
Antoine
-
ghuysmans99 Messages postés 2496 Date d'inscription Statut Contributeur Dernière intervention -
ghuysmans99 Messages postés 2496 Date d'inscription Statut Contributeur Dernière intervention -
Bonjour,
J'ai plusieurs fichier dans mon projet VC++ 2010, dont un en assembleur dans lequel je définie une fonction.
erreur_asm.asm : (MASM)
erreur_asm.h :
main.c :
Lors de la compilation, j'obtient l'erreur LNK2019 : "Symbole externe non résolu _fonction dans la fonction main". Je pense que le fait d'avoir mis _fonction en PUBLIC devrait résoudre le problème mais non.
Quelqu'un sait-il pourquoi ça ne fonctionne pas svp? Je pense que ça doit venir d'un paramétrage du projet, non?
J'ai plusieurs fichier dans mon projet VC++ 2010, dont un en assembleur dans lequel je définie une fonction.
erreur_asm.asm : (MASM)
.MODEL small, c
.CODE
PUBLIC _fonction
; je met la fonction en public pour pouvoir y acceder depuis
;les autres sources en C.
_fonction:
MOV ah, 4ch ; j'ai mis une instruction au hasard, juste pour tester
int 21h
END ; fin du fichier
erreur_asm.h :
extern void fonction(void);
main.c :
#include "erreur_asm.h"
int main() {
fonction();
return 0;
}
Lors de la compilation, j'obtient l'erreur LNK2019 : "Symbole externe non résolu _fonction dans la fonction main". Je pense que le fait d'avoir mis _fonction en PUBLIC devrait résoudre le problème mais non.
Quelqu'un sait-il pourquoi ça ne fonctionne pas svp? Je pense que ça doit venir d'un paramétrage du projet, non?
2 réponses
-
Bonjour,
Je n'ai pas de réponse hormis cette lecture à te proposer:
interfacer du code assembleur et le C
Ritchi-
-
-
Merci pour les liens. C'est bon grâce au lien que tu m'as envoyé j'ai navigué et trouvé un projet qui mélangeait C et ASM sous visual, après étude j'ai résolu mon problème. Je ne suis pas très familiarisé avec MASM mais il semblerait qu'il faille déclarer les fonctions à la façon MASM et sans le _ avant:
Code MASM :fonction proc ret fonction endp
Antoine
-
-
Ca ne marchera de toute façon pas : tu mixes du 16 et du 32 bits. Ton code ASM doit être en 32 si tu veux que ça fonctionne.