http://qs1969.pair.com?node_id=1209791


in reply to How to obtain perl5/auto/IO/IO.so with global symbols?

Hi,

What do you get if you run  ldd -v IO.so on each machine? (par/par/native)

I think that error might really mean that some other library couldn't be found ( Assuming the PAR filters you're using arent mixing things up )

Global symbols?? What global symbols? :)

$ nm -g IO.dll nm: IO.dll: no symbols $ objdump -t IO.dll IO.dll: file format pei-i386 SYMBOL TABLE: no symbols $ objdump -T IO.dll IO.dll: file format pei-i386 objdump: IO.dll: not a dynamic object DYNAMIC SYMBOL TABLE: no symbols $ objdump -x IO.dll |grep -B22 boot_ There is an export table in .edata at 0x674c7000 The Export Tables (interpreted .edata section contents) Export Flags 0 Time/Date stamp 507ac67e Major/Minor 0/0 Name 00007028 dll.exp.dll Ordinal Base 1 Number in: Export Address Table 00000002 [Name Pointer/Ordinal] Table 00000002 Table Addresses Export Address Table 00007034 Name Pointer Table 0000703c Ordinal Table 00007044 Export Address Table -- Ordinal Base 1 [ 0] +base[ 1] 2670 Export RVA [ 1] +base[ 2] 2670 Export RVA [Ordinal/Name Pointer] Table [ 1] _boot_IO [ 0] boot_IO

$ objdump -x IO.dll ... The Import Tables (interpreted .idata section contents) vma: Hint Time Forward DLL First Table Stamp Chain Name Thunk 00008000 00008050 00000000 00000000 000088e4 00008198 DLL Name: perl516.dll vma: Hint/Ord Member-Name Bound-To 82e0 4 PL_check 82ec 51 PL_ppaddr 82f8 132 PerlIO_getpos ... DLL Name: KERNEL32.dll DLL Name: msvcrt.dll

Replies are listed 'Best First'.
Re^2: How to obtain perl5/auto/IO/IO.so with global symbols?
by ek15 (Novice) on Feb 22, 2018 at 23:07 UTC

    edit: For your question "what global symbols?", this is what I mean (the directly delivered executable from Company A).

    [emk@ekdev2 IO]$ pwd /tmp/par-656d6b/cache-08da00fae2ebdaf6d8f69a0988dac72d0e1f3d62/inc/lib +/auto/IO [emk@ekdev2 IO]$ nm -g IO.so U PerlIO_getpos U PerlIO_setpos U PerlIO_tmpfile U PerlIO_ungetc U Perl_Isv_undef_ptr U Perl_Isv_yes_ptr U Perl_PerlIO_clearerr U Perl_PerlIO_error U Perl_PerlIO_fileno U Perl_PerlIO_flush ... 0000000000001760 T boot_IO U fcntl@@GLIBC_2.2.5 U fsync@@GLIBC_2.2.5 U poll@@GLIBC_2.2.5 U sockatmark@@GLIBC_2.2.5

    The following is what I get when I run ldd -v IO.so on each machine. The outputs are exactly the same, apart from the memory addresses. I ran ldd on the test machine's IO.so found in /tmp/par-..., and I ran ldd on the build machine's IO.so found in /usr/lib64/perl5/auto/IO.

    Just realized you probably meant to run ldd -v IO.so for the executable I got directly from Company A. I checked on that, and even that one has the same output for ldd -v.

    linux-vdso.so.1 => (0x00007fff091de000) libc.so.6 => /lib64/libc.so.6 (0x00007f1a0386b000) /lib64/ld-linux-x86-64.so.2 (0x00007f1a03e47000) Version information: ./IO.so: libc.so.6 (GLIBC_2.2.5) => /lib64/libc.so.6 /lib64/libc.so.6: ld-linux-x86-64.so.2 (GLIBC_2.3) => /lib64/ld-linux-x86-64.so. +2 ld-linux-x86-64.so.2 (GLIBC_PRIVATE) => /lib64/ld-linux-x86-64 +.so.2

        Hi. I built my own and it did have global symbols, but that did not fix the issue. The issue was fixed when I changed the Par packer Makefile (Makefile.packer) to no longer package libc.so.6. Many other libraries were also packed, but it seems like none of the packed libraries were used if the test system had its own version of that library. Libc.so.6 was the exception. Anyway, the issue is solved either way. Thanks for all your help.

      Hi,

      The outputs are exactly the same

      Are you really really sure?

      What is the output of  LD_DEBUG=help  ./switchscan ...?

        Yes, I just went back and verified they are the same, apart from the last two lines being switched in order.

        Did you mean LD_DEBUG=help ./switchscan? That will just display the help message. Were you thinking of LD_DEBUG=libs ./switchscan?