Avatar billede simonvalter Praktikant
03. september 2005 - 18:59 Der er 11 kommentarer og
1 løsning

assembler med mingw - linke

Jeg kan ikke få den til at linke med mingw under windows.
På linux gør jeg dette
ld -dynamic-linker /lib/ld-linux.so.2 -lc -o test test.o

simonsays@X ~
$ as -o test.o test.s

simonsays@X ~
$ ld -o test.exe test.o
c:\MinGW\bin\ld.exe: warning: cannot find entry symbol _mainCRTStartup; defaulting to 00401000
test.o(.text+0x14):fake: undefined reference to `printf'

simonsays@X ~
$ ld -e _start  -o test.exe test.o
test.o(.text+0x14):fake: undefined reference to `printf'

simonsays@X ~
$ ld -e _start -lc -o test.exe test.o
c:\MinGW\bin\ld.exe: cannot find -lc

Nogen der har en ide om hvad jeg kan gøre? jeg bruger gnu assembleren da jeg gerne vil bruge AT&T syntaxen og både på min mac,linux og windows men indtil videre går det ikke så godt ;)
Avatar billede arne_v Ekspert
03. september 2005 - 19:03 #1
du mangler et eller andet obskurt

det er mange år siden jeg opgave at bruge ld direkte

prøv:

gcc test.o -o test.exe

så finder gcc sikkert alle de rigtige libs
Avatar billede simonvalter Praktikant
03. september 2005 - 19:05 #2
ja det har jeg prøvet og får samme problem. der er ingen problemer i at få fat i libc  med normal c kode.
Avatar billede arne_v Ekspert
03. september 2005 - 19:07 #3
har du prøvet om du i din asembler kode skal kalde _printf fremfor printf ?
Avatar billede simonvalter Praktikant
03. september 2005 - 19:11 #4
samme problem.

kører jeg med -verbose så får jeg

attempt to open test.o succeeded
test.o
attempt to open c:\mingw\bin\../mingw32/lib/libc.dll.a failed
attempt to open c:\mingw\bin\../mingw32/lib/c.dll.a failed
attempt to open c:\mingw\bin\../mingw32/lib/libc.a failed
attempt to open c:\mingw\bin\../mingw32/lib/libc.dll failed
attempt to open /mingw/mingw32/lib/libc.dll.a failed
attempt to open /mingw/mingw32/lib/c.dll.a failed
attempt to open /mingw/mingw32/lib/libc.a failed
attempt to open /mingw/mingw32/lib/libc.dll failed
..
..
200 linier
..
c:\MinGW\bin\ld.exe: cannot find -lc
Avatar billede arne_v Ekspert
03. september 2005 - 19:19 #5
C:\>type z.s
        .text
LC0:
        .ascii "Det virker\12\0"
.globl _main
_main:
        pushl  %ebp
        movl    %esp, %ebp
        subl    $8, %esp
        andl    $-16, %esp
        movl    $0, %eax
        movl    %eax, -4(%ebp)
        movl    -4(%ebp), %eax
        call    __alloca
        call    ___main
        subl    $12, %esp
        pushl  $LC0
        call    _printf
        addl    $16, %esp
        movl    $0, %eax
        leave
        ret

C:\>gcc z.s -o z.exe

C:\>z
Det virker
Avatar billede arne_v Ekspert
03. september 2005 - 19:19 #6
[ja - jeg har snydt med koden]
Avatar billede arne_v Ekspert
03. september 2005 - 19:21 #7
C:\>as z.s -o z.obj

C:\>gcc z.obj -o z.exe

C:\>z
Det virker
Avatar billede arne_v Ekspert
03. september 2005 - 19:22 #8
men jeg kan ikke gøre det med ld

masser af fejl

jeg hader ld
Avatar billede simonvalter Praktikant
03. september 2005 - 19:24 #9
Ja det virker. Så tror jeg bare jeg gør det sådan fra nu af.
Smid et svar
Avatar billede arne_v Ekspert
03. september 2005 - 19:27 #10
ok
Avatar billede arne_v Ekspert
03. september 2005 - 19:28 #11
det var selvfølgelig interessant at vide hvad gcc driveren sætter op
i kaldet til ld

men nogen gange er det nok at det bare virker
Avatar billede simonvalter Praktikant
03. september 2005 - 19:46 #12
ld -e _start -o test2.exe test2.o -lmsvcrt

virker og fandt jeg frem til med gcc -v
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester