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

  FORUM HardWare.fr
  Programmation
  ASM

  Utiliser SDL avec NASM sous linux

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

Utiliser SDL avec NASM sous linux

n°959138
__goffi__
Posté le 22-01-2005 à 10:11:16  profilanswer
 

Bonjour,
 
j'amerais utiliser SDL avec NASM sous linux, mais je ne sais pas comment lier mon code :D  
 
Je veux assembler ce petit code:
 

Citation :


EXTERN SDL_Init
 
SECTION .text
    global _start
_start
 
;SDL_Init (SDL_INIT_VIDEO)
 
PUSH dword 0x20 ; SDL_INIT_VIDEO
call SDL_Init
 
MOV EAX,1
MOV EBX,0
INT 0x80


 
J'assemble donc avec nasm -f elf tetris.asm. Pour lier, j'ai essayé les 2 commandes suivantes
ld tetris.o -lSDL -o tetris
ld tetris.o /usr/lib/libSDL.a -o tetris
 
Quand je tape ./tetris après la première, j'ai le droit à "zsh: no such file or directory: ./tetris" , alors que le fichier est bien présent !
 
la deuxième m'affiche des undefined references en boucle  :(  
 
Bref, comment je dois faire ?
 
Merci d'avance  :)  
 
PS: j'ai NASM version 0.98.38, donc je ne suis pas, a priori, concerné par le bug dont parle la FAQ de SDL.

mood
Publicité
Posté le 22-01-2005 à 10:11:16  profilanswer
 

n°959204
__goffi__
Posté le 22-01-2005 à 12:57:56  profilanswer
 

J'ai réussi :)
 
En cherchant (pas mal) sur google, j'ai finalement réussi à tomber sur ce code http://icps.u-strasbg.fr/~marchesin/sdl/sdl_asm.tgz (merci à Stephane Marchesin au passage  ;) ). Pour compiler, j'ai donc du modifier le programme comme suit:
 

Citation :


EXTERN SDL_Init
 
SECTION .text
    global main
main
 
;SDL_Init (SDL_INIT_VIDEO)
 
PUSH dword 0x20 ; SDL_INIT_VIDEO
call SDL_Init
 
MOV EAX,1
MOV EBX,0
INT 0x80  


(juste remplacer les _start par des main).
 
On assemble avec nasm -f elf tetris.asm
 
Ensuite il faut lier en passant par gcc:
gcc tetris.o -o tetris -lSDL
 
Et apparemment ça marche  :sol:  
Bon, j'ai plus qu'à coder quelque chose de plus visible pour confirmer ça...
 
Sinon est-ce qu'il y a moyen de lier sans passer par gcc ?


Message édité par __goffi__ le 22-01-2005 à 12:59:27

---------------
http://www.goffi.org
n°959304
Harkonnen
Modérateur
Un modo pour les bannir tous
Posté le 22-01-2005 à 15:52:01  profilanswer
 

__Goffi__ a écrit :


Sinon est-ce qu'il y a moyen de lier sans passer par gcc ?


et en liant avec ld, ça marche pas ?
 
edit: ld -s -o tetris -lSDL tetris.o


Message édité par Harkonnen le 22-01-2005 à 15:53:25

---------------
J'ai un string dans l'array (Paris Hilton)
n°959344
__goffi__
Posté le 22-01-2005 à 17:41:30  profilanswer
 

Nope, comme je l'ai dit dans mon premier post, le shell me sort:
zsh: no such file or directory: ./tetris
 
Ce qui est pour le moins étrange  :??:


Message édité par __goffi__ le 22-01-2005 à 17:41:48

---------------
http://www.goffi.org
n°959360
Harkonnen
Modérateur
Un modo pour les bannir tous
Posté le 22-01-2005 à 18:16:35  profilanswer
 

__Goffi__ a écrit :

Nope, comme je l'ai dit dans mon premier post, le shell me sort:
zsh: no such file or directory: ./tetris
 
Ce qui est pour le moins étrange  :??:


as tu rendu ton fichier exécutable avec chmod ?


---------------
J'ai un string dans l'array (Paris Hilton)
n°959377
__goffi__
Posté le 22-01-2005 à 18:39:56  profilanswer
 

ld s'en charge, les permissions sont bonnes...


---------------
http://www.goffi.org
n°959378
Harkonnen
Modérateur
Un modo pour les bannir tous
Posté le 22-01-2005 à 18:40:43  profilanswer
 

et si tu fais un "ls" dans le répertoire, t'as bien tetris ?


---------------
J'ai un string dans l'array (Paris Hilton)
n°959424
__goffi__
Posté le 22-01-2005 à 19:47:48  profilanswer
 

vi vi :)
Y'a bien un tetris avec les bonnes permissions.
J'ai même fait une helloworld que j'ai assemblé de la même façon et lié de la même façon (sans le -lSDL), pour vérifier que je faisais pas une erreur de syntaxe quelques part, et là aucun problème. Par contre, quand je lie mon helloworld avec -lSDL, j'ai à nouveau no such file or directory (alors que le fichier est bien présent et executable)


Message édité par __goffi__ le 22-01-2005 à 19:50:03

---------------
http://www.goffi.org
n°959495
__goffi__
Posté le 22-01-2005 à 21:42:33  profilanswer
 

On m'a donné la solution sur comp.lang.asm.x86, que je recopie ci dessous:
 

Citation :


Try this command line:
ld -dynamic-linker /lib/ld-linux.so.2 -lSDL tetris.o -o tetris
 
The "dynamic linker" is the program which loads the shared libraries when  
your program is started.


Et il faut remettre _start à la place de main
(Merci à Johannes Kroll)
 
Ceci dit, je ne comprends pas le no such file...
 
Edit: On passe de 8326 octets avec la méthode GCC à 2438 octets avec celle-ci.


Message édité par __goffi__ le 22-01-2005 à 21:56:34

---------------
http://www.goffi.org
n°1257208
nicolas_9
Jésus vous aime
Posté le 02-12-2005 à 00:22:29  profilanswer
 

Bonjour,
 
Merci pour vos infos qui m'ont aidé à utliser YASM sous Linux Debian AMD64.
Je voulais faire un petit topic sur la pages ASM, mais je me suis trompé, il est
sur la page C :  
http://forum.hardware.fr/hardwaref [...] 1049-1.htm
 
Nicolas
 
 
 


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

  Utiliser SDL avec NASM sous linux

 

Sujets relatifs
utiliser des requêtes Access dans VBA[usb linux]Besoin d'une explication sur les URB et interruptions
utiliser Dbexpress au lieu de BDEquels langages utiliser pour un site de e commerce?
[C/Linux] récupérer signaux capteurs carte mèreComment lire une bdd SQL Server sous windows depuis Linux
[UNIX / LINUX]Comment feriez vous ceci ?[C] Compiler un module Linux
[module linux] fread appelle ioctl avec cmd=TCGETS ???[C/Linux] Gestion des interruptions [edit : exploiter le driver série]
Plus de sujets relatifs à : Utiliser SDL avec NASM sous linux


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