Ошибка выполнения с libstdc ++. So.6, lib c .so.6 и GLIB - PullRequest
0 голосов
/ 13 февраля 2020

проблема с исполнением GLIB. Мне нужно было использовать библиотеки, отличные от тех, которые установлены по умолчанию в / usr / lib64 и / lib64, поэтому я скомпилировал свою библиотеку и использовал patchelf для добавления более новых библиотек, содержащих недостающие GLIB. После patchelf я использовал ldd для проверки своей библиотеки:

$ ldd libMyLib.so
        linux-vdso.so.1 =>  (0x00007fffde5ff000)
        librt.so.1 => /lib64/librt.so.1 (0x00007ff91b4e9000)
        libasn1per.so => /path/to/new/lib/libasn1rt.so (0x00007fde2373a000)
        libasn1rt.so => /path/to/new/lib/libstdc++.so.6 (0x00007fde2345d000)
        libstdc++.so.6 => /path/to/new/lib/libstdc++.so.6 (0x00007ff91b20b000)
        libm.so.6 => /lib64/libm.so.6 (0x00007ff91af86000)
        libgcc_s.so.1 => /lib64/libgcc_s.so.1 (0x00007ff91ad70000)
        libpthread.so.0 => /lib64/libpthread.so.0 (0x00007ff91ab53000)
        libc.so.6 => /path/to/new/lib/libc.so.6 (0x00007ff91a7a3000)
        /lib64/ld-linux-x86-64.so.2 (0x00000036b5e00000)\
libMyLib.so: /usr/lib64/libstdc++.so.6: version `GLIBCXX_3.4.14' not found (required by path/to/libMyLib.so)

Иногда вместо этого он получает ошибки lib c .so.6:

/lib64/libc.so.6: version `GLIBC_2.14' not found (required by /path/to/libMyLib.so)

Однако, когда мое приложение работает, (Java приложение использует System.loadLibrary("MyLib")) я получаю вышеуказанную ошибку. Кажется, ошибка показывает, что она все еще смотрит на старую версию libstdc ++. So.6. Есть причина для этого? Кроме того, редактирование LD_LIBRARY_PATH не работает. Судя по другим сообщениям, это связано с тем, что для определенных файлов требуются разные версии библиотек. Я действительно думал, что patchelf будет работать особенно из-за вывода ldd. Есть идеи?

...