I’ve compiled an Ada program for Linux on Ubuntu 5.4 (GNAT 3.4) using the following command:
gnatmake -O3 myprogram -bargs -static
When I run the program on the Ubuntu machine then, it works fine. But on another machine (Linux webserver), I get the following error message when I try strace:
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 +++
What does that mean? Do I understand it correctly that the program is unable to run because two files (ld.so.nohwcap and ld.so.preload) are missing? How can I avoid this error? Is there any possibility to include these files into the program while compiling?
It means that your program tried to dereference a
NULLpointer and died withSIGSEGVNo: it is perfectly normal for these files to not exist, and your problem has nothing to with them.
gdb.straceis only rarely useful for such debugging.Contrary to popular belief, fully-static executables (as the one you built) are less portable on Linux, then dynamically-linked ones. In particular, you probably got warnings at link time, similar to this one:
Using 'initgroups' in statically linked applications requires at runtime the shared libraries from the glibc version used for linkingIf so, and if versions of glibc installed on your build and webserver machines are different, then that’s precisely your problem. Don’t ignore such warnings (and don’t link your executables with
-staticflag).Update:
It may be possible: what you want to do is arrange for the final link line to look like this:
I don’t know how to achieve that with
gnatmake.Another, perhaps simpler, alternative: have you considered installing
libgnat-3.4.so.1on the server?