I’m working on porting my application to 15.3 (from 15.0) and linking my 32-bit application is generating the following unresolved symbols (I’ve truncated):
undefined reference to `xdr_char'
undefined reference to `xdr_int'
I haven’t been able to find anything about a change to in to suggest these symbols shouldn’t be present in libC any longer however I did find some other posts that suggested applications now needed to link against libtirpc.so (-ltirpc) to obtain the xdr symbols. I found that did indeed address the undefined symbols errors in my 64-bit builds however for 32-bit builds the library libtirpc.so is not found by the linker. Some additional research yielded that the symbolic link:
ls -la /usr/lib64/libtirpc.so
lrwxrwxrwx 1 root root 24 May 6 08:25 /usr/lib64/libtirpc.so -> /lib64/libtirpc.so.3.0.0
exists but the corresponding 32-bit version does not:
ls -la /usr/lib/libtirpc.so
ls: cannot access '/usr/lib/libtirpc.so': No such file or directory
The 32-bit library itself does exist:
ls -la /lib/libtirpc.so.3.0.0
-rwxr-xr-x 1 root root 235196 May 6 08:24 /lib/libtirpc.so.3.0.0
I have found that if I manually create the missing 32-bit symbolic link the linker is satisfied and the application works.
I’m not fond of this as a solution on our production server however (it breaks our infrastructure as code practice).
Is this symbolic link missing a bug? What should be creating it?
Note: No support for building 32-bit applications[LEFT]SUSE Linux Enterprise Server does not support compilation of 32-bit applications. It only offers runtime support for 32-bit binaries.
[/LEFT]
So perhaps building my 32-bit application on a SLES 15 server isn’t even something I should be trying to do anymore…