У меня есть библиотека поставщика с закрытым исходным кодом, которая была скомпилирована в среде glib c, скорее всего, в Debian или Ubuntu.
На работе нам трудно использовать альпийские изображения, которые являются средой c.
У меня есть изображение c на альпийском docker изображении. Тем не менее, при запуске исполняемого файла все еще ищут много основных библиотек musl.
Я использую этот образ в качестве базового образа, так как на нем есть glib c. https://hub.docker.com/r/frolvlad/alpine-glibc/
Я добавил /usr/glibc-compat/lib/
к LD_LIBRARY_PATH
. Затем я запускаю следующую команду:
ldd /app/clidriver/bin/db2cli
/lib64/ld-linux-x86-64.so.2 (0x7f636d9de000)
libdb2.so.1 => /app/clidriver/lib//libdb2.so.1 (0x7f636b553000)
libpthread.so.0 => /lib64/ld-linux-x86-64.so.2 (0x7f636d9de000)
libm.so.6 => /lib64/ld-linux-x86-64.so.2 (0x7f636d9de000)
libstdc++.so.6 => ../lib/libstdc++.so.6 (0x7f636b3ba000)
libgcc_s.so.1 => ../lib/libgcc_s.so.1 (0x7f636b3a6000)
libc.so.6 => /lib64/ld-linux-x86-64.so.2 (0x7f636d9de000)
libdl.so.2 => /lib64/ld-linux-x86-64.so.2 (0x7f636d9de000)
libcrypt.so.1 => /usr/glibc-compat/lib//libcrypt.so.1 (0x7f636b36d000)
librt.so.1 => /lib64/ld-linux-x86-64.so.2 (0x7f636d9de000)
libpam.so.0 => /lib/libpam.so.0 (0x7f636b35e000)
libxml2.so.2 => ./libxml2.so.2 (0x7f636b235000)
libz.so.1 => /lib/libz.so.1 (0x7f636b21b000)
liblzma.so.5 => ./liblzma.so.5 (0x7f636b1f8000)
Error relocating /app/clidriver/lib//libdb2.so.1: pthread_mutexattr_setkind_np: symbol not found
Error relocating /app/clidriver/lib//libdb2.so.1: pthread_attr_setaffinity_np: symbol not found
Error relocating /app/clidriver/lib//libdb2.so.1: __snprintf_chk: symbol not found
Error relocating /app/clidriver/lib//libdb2.so.1: __register_atfork: symbol not found
Error relocating /app/clidriver/lib//libdb2.so.1: __vsnprintf_chk: symbol not found
Error relocating /app/clidriver/lib//libdb2.so.1: sysctl: symbol not found
Error relocating /app/clidriver/lib//libdb2.so.1: backtrace: symbol not found
Error relocating /app/clidriver/lib//libdb2.so.1: getgrent_r: symbol not found
Error relocating /app/clidriver/lib//libdb2.so.1: __res_init: symbol not found
Error relocating /app/clidriver/lib//libdb2.so.1: dlvsym: symbol not found
Error relocating /usr/glibc-compat/lib//libcrypt.so.1: __stpncpy: symbol not found
Error relocating /usr/glibc-compat/lib//libcrypt.so.1: __open_nocancel: symbol not found
Error relocating /usr/glibc-compat/lib//libcrypt.so.1: __read_nocancel: symbol not found
Error relocating /usr/glibc-compat/lib//libcrypt.so.1: __snprintf: symbol not found
Error relocating /usr/glibc-compat/lib//libcrypt.so.1: __explicit_bzero_chk: symbol not found
Error relocating /usr/glibc-compat/lib//libcrypt.so.1: __libc_alloca_cutoff: symbol not found
Error relocating /usr/glibc-compat/lib//libcrypt.so.1: __close_nocancel: symbol not found
Error relocating /usr/glibc-compat/lib//libcrypt.so.1: errno: symbol not found
Error relocating /app/clidriver/bin/db2cli: __printf_chk: symbol not found
Error relocating /app/clidriver/bin/db2cli: __strncat_chk: symbol not found
Error relocating /app/clidriver/bin/db2cli: __vsprintf_chk: symbol not found
Error relocating /app/clidriver/bin/db2cli: __fprintf_chk: symbol not found
Похоже, libcrypt использует версию glib c -compat, но даже она не может найти определенные символы. Я не эксперт в этом вопросе низкого уровня, но есть ли способ заставить весь exe использовать определенные c версии библиотек?