3

On Ubuntu 18.04 with apt install I installed libssl1.0.0 and libssl1.0-dev.

The following shared objects are available:

/usr/lib/x86_64-linux-gnu/libssl.so
/usr/lib/x86_64-linux-gnu/libssl.so.1.0.0
/usr/lib/x86_64-linux-gnu/libcrypto.so.1.0.0
/usr/lib/x86_64-linux-gnu/libcrypto.so

Set the variable LD_LIBRARY_PATH with the previous path:

$ echo $LD_LIBRARY_PATH
/usr/lib/x86_64-linux-gnu

Created the following symbolic links:

ln -s /usr/lib/x86_64-linux-gnu/libssl.so.1.0.0 /usr/lib/x86_64-linux-gnu/libssl.so.10
ln -s /usr/lib/x86_64-linux-gnu/libcrypto.so.1.0.0 /usr/lib/x86_64-linux-gnu/libcrypto.so.10

Now this is what I have:

$ file /usr/lib/x86_64-linux-gnu/libssl.so.10
/usr/lib/x86_64-linux-gnu/libssl.so.10: symbolic link to /usr/lib/x86_64-linux-gnu/libssl.so.1.0.0

$ ldd /usr/lib/x86_64-linux-gnu/libssl.so.10
    linux-vdso.so.1 (0x00007ffeeaddb000)
    libcrypto.so.1.0.0 => /usr/lib/x86_64-linux-gnu/libcrypto.so.1.0.0 (0x00007f28054fc000)
    libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007f280510b000)
    libdl.so.2 => /lib/x86_64-linux-gnu/libdl.so.2 (0x00007f2804f07000)
    /lib64/ld-linux-x86-64.so.2 (0x00007f2805ba7000)

$ file /usr/lib/x86_64-linux-gnu/libssl.so.1.0.0
/usr/lib/x86_64-linux-gnu/libssl.so.1.0.0: ELF 64-bit LSB shared object, x86-64, version 1 (SYSV), dynamically linked, BuildID[sha1]=0d054641049b9747c05d030262295dfdfdd3055d, stripped

$ ldd /usr/lib/x86_64-linux-gnu/libssl.so.1.0.0
    linux-vdso.so.1 (0x00007ffff3971000)
    libcrypto.so.1.0.0 => /usr/lib/x86_64-linux-gnu/libcrypto.so.1.0.0 (0x00007f446f2b1000)
    libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007f446eec0000)
    libdl.so.2 => /lib/x86_64-linux-gnu/libdl.so.2 (0x00007f446ecbc000)
    /lib64/ld-linux-x86-64.so.2 (0x00007f446f95c000)

So, at this point the dependencies for the library I will use are met. When I try to validate that, I get issues such as version `libssl.so.10' not found.

$ file libpjsua2.so
libpjsua2.so: ELF 64-bit LSB shared object, x86-64, version 1 (SYSV), dynamically linked, BuildID[sha1]=9481ccc9a0bbfe937ebb1dbc40002af55c2b424c, not stripped

$ ldd libpjsua2.so
./libpjsua2.so: /usr/lib/x86_64-linux-gnu/libssl.so.10: version `libssl.so.10' not found (required by ./libpjsua2.so)
./libpjsua2.so: /usr/lib/x86_64-linux-gnu/libcrypto.so.10: version `OPENSSL_1.0.1_EC' not found (required by ./libpjsua2.so)
./libpjsua2.so: /usr/lib/x86_64-linux-gnu/libcrypto.so.10: version `libcrypto.so.10' not found (required by ./libpjsua2.so)
    linux-vdso.so.1 (0x00007ffc83691000)
    libstdc++.so.6 => /usr/lib/x86_64-linux-gnu/libstdc++.so.6 (0x00007f0d98395000)
    libssl.so.10 => /usr/lib/x86_64-linux-gnu/libssl.so.10 (0x00007f0d9812d000)
    libcrypto.so.10 => /usr/lib/x86_64-linux-gnu/libcrypto.so.10 (0x00007f0d97cea000)
    librt.so.1 => /lib/x86_64-linux-gnu/librt.so.1 (0x00007f0d97ae2000)
    libpthread.so.0 => /lib/x86_64-linux-gnu/libpthread.so.0 (0x00007f0d978c3000)
    libasound.so.2 => /usr/lib/x86_64-linux-gnu/libasound.so.2 (0x00007f0d975bc000)
    libm.so.6 => /lib/x86_64-linux-gnu/libm.so.6 (0x00007f0d9721e000)
    libgcc_s.so.1 => /lib/x86_64-linux-gnu/libgcc_s.so.1 (0x00007f0d97006000)
    libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007f0d96c15000)
    /lib64/ld-linux-x86-64.so.2 (0x00007f0d98d91000)
    libdl.so.2 => /lib/x86_64-linux-gnu/libdl.so.2 (0x00007f0d96a11000)

I would like to highlight that appears somehow it's able to resolve some .so:

    libssl.so.10 => /usr/lib/x86_64-linux-gnu/libssl.so.10 (0x00007f0d9812d000)
    libcrypto.so.10 => /usr/lib/x86_64-linux-gnu/libcrypto.so.10 (0x00007f0d97cea000)

There is a way for me to fix this? So libpjsua2.so is usable.

Paulo Oliveira
  • 2,411
  • 1
  • 31
  • 47
  • 1
    "There is a way for me to fix this? So libpjsua2.so is usable." - Yes, just obtain (somehow) the **actual** `libssl.so.10` library, not the one created by renaming (via symlink) the `libssl.so.1` library. Note, that the *major* library version normally represents **binary compatibility**: the libraries with different major versions - 1 and 10 - are not binary compatible. It could also be that `libssl.so.1` and `libssl.so.10` are actually compatible but just use different version scheme. But still you cannot reuse the one instead of another. – Tsyvarev Jun 30 '20 at 22:19

1 Answers1

3

The shared library libpjsua2.so is designed for the version of OpenSSL shipped by Red Hat, CentOS, or Fedora, while you're trying to use a version built for Ubuntu. This won't work because the SONAME is different, as well as the symbol versioning.

There isn't any way to make this work, so you'll either need to use a shared library compiled for an Ubuntu (or Debian) system or run your program on the system the shared library was compiled for. Note that both Debian and Ubuntu ship a package called libpjsua2, so installing that may meet your needs.

You could theoretically copy the relevant OpenSSL version from the intended operating system, but doing so will likely involve a bunch of other broken shared libraries, and you will probably not be happy with the result.

bk2204
  • 64,793
  • 6
  • 84
  • 100
  • 2
    Impressive just changed the Linux from Debian/Ubuntu to CentOS. Installed the `openssl` and `compat-openssl` and this error disappeared. Thanks very much @bk2204 – Paulo Oliveira Jul 01 '20 at 21:10