On Wed, Jul 27, 2011 at 11:34 AM, Neal Becker <ndbecker2(a)gmail.com> wrote:
7. Verify that the only difference is replacing the shared libs
installed via
rpm vs. the same shared libs installed without rpm.
So something that rpm does to the shared libs (in /usr/lib64/dmtcp) is breaking
things. The only thing I can think of is strip.
8. Notice the error:
dlerror() = /usr/lib64/dmtcp/libmtcp.so: undefined symbol:
mtcp_restore_start
But it is defined!
nm -D /usr/lib64/dmtcp/libmtcp.so | grep mtcp_restore_start
000000000000911c T mtcp_restore_start
That was the non-working version of libmtcp.so, which has been stripped.
It isn't strip. If I run strip on the version of libmtcp.so left in
the build dir and copy it over /usr/lib64/dmtcp/libmtcp.so, then it
also works. But that version is different from the one installed by
rpm. Watch this:
$ ldd -r /usr/lib64/dmtcp/libmtcp.so
linux-vdso.so.1 => (0x00007fff7d7c3000)
libdl.so.2 => /lib64/libdl.so.2 (0x00007f913f396000)
libpthread.so.0 => /lib64/libpthread.so.0 (0x00007f913f17b000)
libgcc_s.so.1 => /lib64/libgcc_s.so.1 (0x00007f913ef65000)
libc.so.6 => /lib64/libc.so.6 (0x00007f913ebcc000)
/lib64/ld-linux-x86-64.so.2 (0x0000003520600000)
undefined symbol: mtcp_restore_start (/usr/lib64/dmtcp/libmtcp.so)
undefined symbol: dmtcp_exists (/usr/lib64/dmtcp/libmtcp.so)
undefined symbol: mtcp_restore_argv_start_addr (/usr/lib64/dmtcp/libmtcp.so)
undefined symbol: mtcp_sys_errno (/usr/lib64/dmtcp/libmtcp.so)
undefined symbol: mtcp_get_thread_sysinfo (/usr/lib64/dmtcp/libmtcp.so)
undefined symbol: mtcp_no (/usr/lib64/dmtcp/libmtcp.so)
undefined symbol: mtcp_dump_tls (/usr/lib64/dmtcp/libmtcp.so)
undefined symbol: mtcp_readdec (/usr/lib64/dmtcp/libmtcp.so)
undefined symbol: test_and_prepare_for_forked_ckpt (/usr/lib64/dmtcp/libmtcp.so)
undefined symbol: write_ckpt_to_file (/usr/lib64/dmtcp/libmtcp.so)
undefined symbol: mtcp_readchar (/usr/lib64/dmtcp/libmtcp.so)
$ ldd -r /tmp/libmtcp-stripped.so
linux-vdso.so.1 => (0x00007fffcd3ff000)
libdl.so.2 => /lib64/libdl.so.2 (0x00007f02082b3000)
libpthread.so.0 => /lib64/libpthread.so.0 (0x00007f0208098000)
libgcc_s.so.1 => /lib64/libgcc_s.so.1 (0x00007f0207e82000)
libc.so.6 => /lib64/libc.so.6 (0x00007f0207ae9000)
/lib64/ld-linux-x86-64.so.2 (0x0000003520600000)
The program /usr/lib/rpm/debugedit is used to extract debug
information from ELF objects when building RPMs. It looks like it is
damaging the shared object somehow.
--
Jerry James
http://www.jamezone.org/