32-bit libtirpc.so missing

Hello!

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?

Thank you for your help!

I forgot to note, I do have the **libtirpc3-32bit **package installed (that’s why I have the 32-bit /lib/libtirpc.so.3.0.0)

I did just find this in the documentation:

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…

Here on Leap 15.3:

ls -al /lib64/libtirp*
lrwxrwxrwx 1 root root     17  6. Mai 17:25 /lib64/libtirpc.so.3 -> libtirpc.so.3.0.0
-rwxr-xr-x 1 root root 223536  6. Mai 17:25 /lib64/libtirpc.so.3.0.0
ls -al /lib/libtirp*
lrwxrwxrwx 1 root root     17  6. Mai 17:24 /lib/libtirpc.so.3 -> libtirpc.so.3.0.0
-rwxr-xr-x 1 root root 235196  6. Mai 17:24 /lib/libtirpc.so.3.0.0

zypper se -si libtirp
Loading repository data...
Reading installed packages...

S | Name               | Type    | Version     | Arch   | Repository
--+--------------------+---------+-------------+--------+-----------
i | libtirpc-netconfig | package | 1.2.6-1.131 | x86_64 | OSS
i | libtirpc3          | package | 1.2.6-1.131 | x86_64 | OSS
i | libtirpc3-32bit    | package | 1.2.6-1.131 | x86_64 | OSS

No /lib64/libtirpc.so or /lib64/tirpc.so

Hi
Correct… no more 32bit support.

https://stackoverflow.com/questions/8004241/how-to-compile-glibc-32bit-on-an-x86-64-machine
https://pkgs.org/download/glibc-devel-32bit

In this particular case

ln -s /lib/libtirpc.so.3.0.0  /usr/lib/libtirpc.so

should be enough to allow building 32 bit application against libtirpc.

Compiling 32-bit application for a 64-bit OS is a bad habit.