Ich habe ein Ada-Programm für Linux auf Ubuntu 5.4 (GNAT 3.4) mit dem folgenden Befehl zusammengestellt:Ada Programm unter Linux: SIGSEGV wegen fehlender Datei?
gnatmake -O3 myprogram -bargs -static
Wenn ich das Programm auf dem Ubuntu-Rechner laufe funktioniert es dann, in Ordnung. Aber auf einem anderen Rechner (Linux Webserver), erhalte ich die folgende Fehlermeldung, wenn ich strace
versuchen:
execve("./myprogram", ["./myprogram"], [/* 15 vars */]) = 0
brk(0) = 0x811e000
access("/etc/ld.so.nohwcap", F_OK) = -1 ENOENT (No such file or directory)
mmap2(NULL, 8192, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0xb76f8000
access("/etc/ld.so.preload", R_OK) = -1 ENOENT (No such file or directory)
mmap2(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0xb76f7000
set_thread_area({entry_number:-1 -> 6, base_addr:0xb76f7680, limit:1048575, seg_32bit:1, contents:0, read_exec_only:0, limit_in_pages:1, seg_not_present:0, useable:1}) = 0
--- SIGSEGV (Segmentation fault) @ 0 (0) ---
+++ killed by SIGSEGV +++
Was bedeutet das? Verstehe ich es richtig, dass das Programm nicht ausgeführt werden kann, weil zwei Dateien (ld.so.nohwcap und ld.so.preload) fehlen? Wie kann ich diesen Fehler vermeiden? Gibt es eine Möglichkeit, diese Dateien beim Kompilieren in das Programm einzubinden?
Der Ausgang Sie sieht übertragen nicht notwendigerweise - und wahrscheinlich auch nicht - bedeutet, dass eine Verbindung zwischen dem SegV und den fehlenden Dateien besteht. Das wirst du die ganze Zeit in Strace sehen; Es ist nur das System, das z.B. eine Preload-Bibliothek, die möglicherweise nicht vorhanden ist. gdb ist ein besseres Werkzeug zum Aufspüren von Segvs, wenn Sie Debugging-Symbole in Ihrem Programm haben. Es ist lange her, dass ich ADA debugged habe, also bin ich mir nicht sicher, wie ich das genau machen soll. – jimw
Haben Sie auch das Programm auf dem Webserver erstellt, oder kopieren Sie die Binärdatei über? Wenn letzteres, versuche es dort zu bauen. – jimw
Ich habe die Binärdatei kopiert. Dies ist jedoch notwendig, da GNAT auf dem Webserver fehlt. Und ich darf dort keine neuen Pakete installieren. – caw