Nathaniel Smith wrote: > Right... it isn't possible to create real static binaries with glibc > :-(. Actually, that is not really a problem. You can build static binaries, and I do it for my server. That is, they do not need any dynamic libraries for running. But it is true that they need some infrastructure from glibc: config files for name resolution, timezone, locales, and I think there are more. But this infrastructure is pretty stable: AFAIK there wasn't any change for this in the glibc-2 line. So it's no problem to build a static binary with glibc 2.3 and run it on a system that uses 2.2 (which is what I do).
> This seems suspicious to me -- binaries compiled with glibc 2.3, even > with the -static switch, still require glibc 2.3 be available to > fully work. Not really, see above. > (You might also try > http://venge.net/monotone/downloads/mtn-0.29-linux-x86.bz2 > anyway... I'm not sure the binary currently there _is_ compiled with > glibc 2.3, that might be a lie as well :-). It definitely is > statically linked to libstdc++, though, so that shouldn't be an > issue.) But it's not a static binary and requires /lib/libc-2.3.so, which doesn't exist on my server. > Uh... yeah. A non-stripped build would be helpful; I'm not sure how > else we're going to figure out what's going on here :-). Ok, I built a non-stripped binary again and tried it again. It was actually harder to reproduce the error with the non-stripped binary than with the stripped binary... When it ran off (on the fourth try), I attached gdb, printed the stack, continued, interrupted, printed stack again, twice. Here is the output: ========================================================================= Attaching to program: /usr/local/bin/mtn, process 13565 [New Thread 16384 (LWP 13565)] [Switching to Thread 16384 (LWP 13565)] 0x08468605 in _int_malloc (av=0x8630360, bytes=150847728) at malloc.c:3849 3849 malloc.c: No such file or directory. in malloc.c (gdb) bt #0 0x08468605 in _int_malloc (av=0x8630360, bytes=150847728) at malloc.c:3849 #1 0x08467889 in __libc_malloc (bytes=112) at malloc.c:3292 #2 0x0830d9a8 in sqlite3MallocRaw (n=140706656, doMemManage=1) at sqlite/util.c:590 #3 0x0830da7e in sqlite3Malloc (n=140706656, doMemManage=150847728) at sqlite/util.c:658 #4 0x08383fb3 in allocateCursor (p=0x8630360, iCur=112, iDb=150847728) at sqlite/vdbe.c:191 #5 0x08384cfc in sqlite3VdbeExec (p=0x8cca780) at sqlite/vdbe.c:2587 #6 0x0830f02f in sqlite3_step (pStmt=0x8630360) at sqlite/vdbeapi.c:231 #7 0x0814402b in database::fetch(std::vector<std::vector<std::string, std::allocator<std::string> >, std::allocator<std::vector<std::string, std::allocator<std::string> > > >&, int, int, query const&) () #8 0x08145870 in database::delta_exists(hexenc<id> const&, std::string const&) () #9 0x0814a7e2 in database::file_version_exists(file<hexenc<id> > const&) () #10 0x080f3387 in commands::cmd_checkout::exec(app_state&, std::vector<utf8, std::allocator<utf8> > const&) () #11 0x080a612e in commands::process(app_state&, std::string const&, std::vector<utf8, std::allocator<utf8> > const&) () #12 0x0829f6af in cpp_main(int, char**) () #13 0x082a3b7c in main () #14 0x0843fbc9 in __libc_start_main (main=0x82a39f6 <main>, argc=5, ubp_av=0xbffffbb4, init=0x843fce0 <__libc_csu_init>, fini=0x843fd40 <__libc_csu_fini>, rtld_fini=0, stack_end=0x8fdc0f0) at ../sysdeps/generic/libc-start.c:152 (gdb) cont Continuing. Program received signal SIGINT, Interrupt. _int_malloc (av=0x8630360, bytes=140706656) at malloc.c:3917 3917 in malloc.c (gdb) bt #0 _int_malloc (av=0x8630360, bytes=140706656) at malloc.c:3917 #1 0x08467889 in __libc_malloc (bytes=112) at malloc.c:3292 #2 0x0830d9a8 in sqlite3MallocRaw (n=140706656, doMemManage=1) at sqlite/util.c:590 #3 0x0830da7e in sqlite3Malloc (n=140706656, doMemManage=140706656) at sqlite/util.c:658 #4 0x08383fb3 in allocateCursor (p=0x8630360, iCur=112, iDb=140706656) at sqlite/vdbe.c:191 #5 0x08384cfc in sqlite3VdbeExec (p=0x8cca780) at sqlite/vdbe.c:2587 #6 0x0830f02f in sqlite3_step (pStmt=0x8630360) at sqlite/vdbeapi.c:231 #7 0x0814402b in database::fetch(std::vector<std::vector<std::string, std::allocator<std::string> >, std::allocator<std::vector<std::string, std::allocator<std::string> > > >&, int, int, query const&) () #8 0x08145870 in database::delta_exists(hexenc<id> const&, std::string const&) () #9 0x0814a7e2 in database::file_version_exists(file<hexenc<id> > const&) () #10 0x080f3387 in commands::cmd_checkout::exec(app_state&, std::vector<utf8, std::allocator<utf8> > const&) () #11 0x080a612e in commands::process(app_state&, std::string const&, std::vector<utf8, std::allocator<utf8> > const&) () #12 0x0829f6af in cpp_main(int, char**) () #13 0x082a3b7c in main () #14 0x0843fbc9 in __libc_start_main (main=0x82a39f6 <main>, argc=5, ubp_av=0xbffffbb4, init=0x843fce0 <__libc_csu_init>, fini=0x843fd40 <__libc_csu_fini>, rtld_fini=0, stack_end=0x8630360) at ../sysdeps/generic/libc-start.c:152 (gdb) cont Continuing. Program received signal SIGINT, Interrupt. _int_malloc (av=0x8630360, bytes=140706656) at malloc.c:3872 3872 in malloc.c (gdb) bt #0 _int_malloc (av=0x8630360, bytes=140706656) at malloc.c:3872 #1 0x08467889 in __libc_malloc (bytes=112) at malloc.c:3292 #2 0x0830d9a8 in sqlite3MallocRaw (n=140706656, doMemManage=1) at sqlite/util.c:590 #3 0x0830da7e in sqlite3Malloc (n=140706656, doMemManage=140706656) at sqlite/util.c:658 #4 0x08383fb3 in allocateCursor (p=0x8630360, iCur=112, iDb=140706656) at sqlite/vdbe.c:191 #5 0x08384cfc in sqlite3VdbeExec (p=0x8cca780) at sqlite/vdbe.c:2587 #6 0x0830f02f in sqlite3_step (pStmt=0x8630360) at sqlite/vdbeapi.c:231 #7 0x0814402b in database::fetch(std::vector<std::vector<std::string, std::allocator<std::string> >, std::allocator<std::vector<std::string, std::allocator<std::string> > > >&, int, int, query const&) () #8 0x08145870 in database::delta_exists(hexenc<id> const&, std::string const&) () #9 0x0814a7e2 in database::file_version_exists(file<hexenc<id> > const&) () #10 0x080f3387 in commands::cmd_checkout::exec(app_state&, std::vector<utf8, std::allocator<utf8> > const&) () #11 0x080a612e in commands::process(app_state&, std::string const&, std::vector<utf8, std::allocator<utf8> > const&) () #12 0x0829f6af in cpp_main(int, char**) () #13 0x082a3b7c in main () #14 0x0843fbc9 in __libc_start_main (main=0x82a39f6 <main>, argc=5, ubp_av=0xbffffbb4, init=0x843fce0 <__libc_csu_init>, fini=0x843fd40 <__libc_csu_fini>, rtld_fini=0, stack_end=0x8630360) at ../sysdeps/generic/libc-start.c:152 ========================================================================= > You can use strace's -P option to attach it to an already running > process. I.e., you can wait for it to hang, and only then start > strace, with something like 'strace -P <pid of hung mtn>'. Might be > useful, might not, depending on what it's actually doing in there... Ok, tried it, but didn't produce any output... Detlef -- Detlef Vollmann vollmann engineering gmbh Linux and C++ for Embedded Systems http://www.vollmann.ch/ Linux for PXA270 Colibri module: http://www.vollmann.ch/en/colibri/ _______________________________________________ Monotone-devel mailing list [email protected] http://lists.nongnu.org/mailman/listinfo/monotone-devel
