Isso pode ser possível. Você pode verificar as bibliotecas compartilhadas carregadas pelo seu programa com o comando ldd : por exemplo,
# ldd /usr/sbin/openvpn
linux-vdso.so.1 => (0x00007ffffb5fe000)
liblzo2.so.2 => /lib/x86_64-linux-gnu/liblzo2.so.2 (0x00007fc3dc936000)
libpthread.so.0 => /lib/x86_64-linux-gnu/libpthread.so.0 (0x00007fc3dc719000)
libpkcs11-helper.so.1 => /usr/lib/x86_64-linux-gnu/libpkcs11-helper.so.1 (0x00007fc3dc4ff000)
libssl.so.1.0.0 => /lib/x86_64-linux-gnu/libssl.so.1.0.0 (0x00007fc3dc2a1000)
libcrypto.so.1.0.0 => /lib/x86_64-linux-gnu/libcrypto.so.1.0.0 (0x00007fc3dbec5000)
libdl.so.2 => /lib/x86_64-linux-gnu/libdl.so.2 (0x00007fc3dbcc0000)
libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007fc3db8f8000)
/lib64/ld-linux-x86-64.so.2 (0x00007fc3dce22000)
libz.so.1 => /lib/x86_64-linux-gnu/libz.so.1 (0x00007fc3db6df000)
isto mostra todas as bibliotecas invocadas por openvpn . As bibliotecas cujo nome termina em .so.N , onde N é um único dígito (qualquer dígito único) são, na verdade, links para as bibliotecas reais. Tome libz.so.1 como um exemplo:
root@rasal:/lib/x86_64-linux-gnu# find / -type f -name 'libz.so.1*' -print
/lib/x86_64-linux-gnu/libz.so.1.2.8
/lib/i386-linux-gnu/libz.so.1.2.8
root@rasal:/lib/x86_64-linux-gnu# ls /lib/x86_64-linux-gnu/libz.so.*
/lib/x86_64-linux-gnu/libz.so.1 /lib/x86_64-linux-gnu/libz.so.1.2.8
root@rasal:/lib/x86_64-linux-gnu# file /lib/x86_64-linux-gnu/libz.so.*
/lib/x86_64-linux-gnu/libz.so.1: symbolic link to 'libz.so.1.2.8'
/lib/x86_64-linux-gnu/libz.so.1.2.8: ELF 64-bit LSB shared object, x86-64, version 1 (SYSV), dynamically linked, BuildID[sha1]=0x42bce97e9a0f7a78fcdb3b79d11f67b02abc522c, stripped
O comando ldd mostra o que a biblioteca carregada, libz.so.1 (btw, isso é chamado de soname da biblioteca compartilhada) resolve e os comandos a seguir localizam a biblioteca e mostre que o soname é, na verdade, um link para o nome real da biblioteca compartilhada.
Você pode esperar determinar qual biblioteca compartilhada é carregada, alterando este link.
Há um certo número de ressalvas para isso, o mais importante é que, enquanto você está geralmente seguro em substituir diferentes versões menores da mesma versão principal (por exemplo, usando libz.so.1.2.8 em vez de libz .1.1.6) é bom, enquanto substituindo versões diferentes em seu número maior (o primeiro número seguinte so ) não é possível. De acordo com a página tldp.org ,
Programs, when they internally list the shared libraries they need, should only list the soname they need.
Isso implica que você não poderá substituir duas versões da mesma biblioteca compartilhada pertencentes a diferentes versões principais .
De qualquer forma, sugiro o link acima para mais esclarecimentos.