Mă confrunt cu o problemă care mi-a consumat mult din tine. Încerc să conectez fișierul meu obiect (program mic compilat cu nasm) cu ld linker și folosind funcții c. Am căutat mult și am găsit că soluția pentru a încărca toate bibliotecile c este să treci -lc ca opțiune la ld, care a dezactivat sincer toate avertismentele și erorile și a generat executabilul meu. Problema este că primesc întotdeauna eroarea „Fără un astfel de fișier sau director” atunci când încerc să rulez programul.
Am căutat mult pe internet și am găsit acest răspuns util Întrebați răspunsul Ubuntu dar din pacate asta nu mi-a rezolvat problema.
cateva informatii aici:
> fișierul principal
întors:
principal: executabil LSB ELF pe 64 de biți, x86-64, versiunea 1 (SYSV), legat dinamic, interpret /lib/ld64.so.1, nedemontat
Versiunea programului este pe 64 de biți și interpretul există conform „comanda fișierului.
> ldd principal
întors:
linux-vdso.so.1 (0x00007ffdf4bcc000)
libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007f7a10b23000)
/lib/ld64.so.1 => /lib64/ld-linux-x86-64.so.2 (0x00007f7a10f14000)
Conform comenzii „ldd”, nu lipsește nicio bibliotecă partajată
N.B:
Același program a fost compilat și legat cu succes cu nasm și ld pe macosx prin adăugarea acelor opțiuni
-macosx_version_min 11.0 -L /Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/lib -lSystem -no_pie
la linker-ul ld.
EDIT1:
Programul legat funcționează fără nicio problemă când elimin -lc pentru ld și, desigur, apelurile funcțiilor c din fișierul meu asm
EDIT2:
readelf -h principal
întors:
Antet ELF:
Magie: 7f 45 4c 46 02 01 01 00 00 00 00 00 00 00 00 00
Clasa: ELF64
Date: complementul 2, little endian
Versiune: 1 (actuală)
OS/ABI: UNIX - System V
Versiunea ABI: 0
Tip: EXEC (fișier executabil)
Mașină: Advanced Micro Devices X86-64
Versiune: 0x1
Adresa punctului de intrare: 0x4005d0
Începutul antetelor programului: 64 (octeți în fișier)
Începutul antetelor secțiunii: 19096 (octeți în fișier)
Steaguri: 0x0
Dimensiunea acestui antet: 64 (octeți)
Dimensiunea antetelor programului: 56 (octeți)
Numărul antetelor programului: 7
Dimensiunea antetelor secțiunii: 64 (octeți)
Număr de anteturi de secțiune: 21
Indexul tabelului șirurilor din antetul secțiunii: 20
Câteva informații suplimentare despre program