После обновления программного обеспечения с 32-разрядного до 64-разрядного предварительно скомпилированный двоичный файл начинает давать сбой с ошибкой:
[root@localhost /root]# LD_PRELOAD=/opt/xyz/lib/mylib.so mycommand /inputfile.txt /outputfile.txt
ERROR: ld.so: object '/opt/xyz/lib/mylib.so' from LD_PRELOAD cannot be preloaded: ignored.
mycommand: error while loading shared libraries: mylib.so: cannot open shared object file: No such file or directory
mycommand
это предварительно скомпилированный бинарный файл, который находится в / usr / bin / mycommand. Требуется библиотека как LD_PRELOAD.
Очевидно, я убедился, что файл /opt/xyz/lib/mylib.so существует:
[root@localhost lib]# ls -alh
total 512K
drwxr-xr-x 2 root root 4.0K Mar 1 15:40 .
drwxr-xr-x 10 root root 4.0K Feb 24 10:54 ..
-rwxr-xr-x 1 root root 218K Oct 28 22:41 mylib64.so
lrwxrwxrwx 1 root root 14 Mar 1 15:40 mylib.so -> mylib64.so
Есть ли еще какая-то отладочная информация, которую я могу извлечь, кроме этой ошибки?
Кажется, не имеет значения, если я просто удаляю mylib.so или нет, ошибка остается прежней. Трудно сказать, если не может предварительная нагрузка библиотека или, если она не может находить библиотека.
Существуют ли другие переменные среды или библиотеки, которые требуются для работы LD_PRELOAD?
Мне кажется необходимым приобрести версию исходного кода бинарного файла mycommand и заново скомпилировать его. Однако, чтобы сделать это, я думаю, было бы полезно понять, почему это на самом деле терпит неудачу прямо сейчас.
Задача ещё не решена.
Других решений пока нет …