Utiliser SDL avec NASM sous linux

Utiliser SDL avec NASM sous linux - ASM - Programmation

Marsh Posté le 22-01-2005 à 10:11:16    

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.

Reply

Marsh Posté le 22-01-2005 à 10:11:16   

Reply

Marsh Posté le 22-01-2005 à 12:57:56    

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
Reply

Marsh Posté le 22-01-2005 à 15:52:01    

__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)
Reply

Marsh Posté le 22-01-2005 à 17:41:30    

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
Reply

Marsh Posté le 22-01-2005 à 18:16:35    

__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)
Reply

Marsh Posté le 22-01-2005 à 18:39:56    

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


---------------
http://www.goffi.org
Reply

Marsh Posté le 22-01-2005 à 18:40:43    

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


---------------
J'ai un string dans l'array (Paris Hilton)
Reply

Marsh Posté le 22-01-2005 à 19:47:48    

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
Reply

Marsh Posté le 22-01-2005 à 21:42:33    

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
Reply

Marsh Posté le 02-12-2005 à 00:22:29    

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
 
 
 

Reply

Sujets relatifs:

Leave a Replay

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