другой ответ правильный.На случай, если ссылка там не работает, вот что произошло в моем случае и как я это исправил.
Я работал на более старом ядре версии 3.10 в системе, где был установлен Qt5.Одна из библиотек, а именно libQt5Core.so.5.11.0
, имеет раздел ELF .note.ABI-tag
, который указывает, что библиотека была скомпилирована для ядра 3.17.0.Присутствие этого раздела можно увидеть, например, через
objdump -sj .note.ABI-tag /path/to/library.so
И тот факт, что он скомпилирован для более нового ядра, раскрывается с помощью file
с заметным замечанием "для GNU / Linux 3.17.0".", ближе к концу его выхода.В моем случае это было:
/opt/qt511/lib/libQt5Core.so.5.11.0: ELF 64-bit LSB shared object, x86-64, version 1 (SYSV), dynamically linked (uses shared libs), for GNU/Linux 3.17.0, BuildID[sha1]=df5f7e933899d1ff629145ab7ca35b2f9bc41843, stripped
Так что исправление в моем случае состояло в том, чтобы запустить
strip --remove-section=.note.ABI-tag /path/to/library.so
, который удалил этот раздел и позволил библиотеке загружаться.
Однако будьте осторожны: если вы сделаете это, вы явно нарушите допущения, которые могла использовать система сборки библиотек, так что все может сломаться.В моем случае, они этого не сделали.