Я хотел бы установить LD_PRELOAD, чтобы указать на общую библиотеку, где я могу запустить либо 64-битное, либо 32-битное приложение. Очевидно, что разделяемая библиотека и исполняемый файл должны совпадать в бит-ness.Использование смешанной среды 64 бит/32 бит LD_PRELOAD в Linux
$ LD_PRELOAD=/lib64/lib_init.so ./hello32
ERROR: ld.so: object '/lib64/lib_init.so' from LD_PRELOAD cannot be preloaded (wrong ELF class: ELFCLASS64): ignored
где hello32 - это 32-разрядное приложение. Есть несколько страниц в мире, которые говорят, что я должен быть в состоянии сделать:
$ LD_PRELOAD='/$LIB/lib_init.so' ./hello32
ERROR: ld.so: object '/$LIB/lib_init.so' from LD_PRELOAD cannot be preloaded (cannot open shared object file): ignored
Где $ LIB будет автоматически переключаться между Lib и lib64 в зависимости от того, является ли 32 или 64 приложения. Но, очевидно, это не сработает.
Есть ли какой-нибудь трюк, чтобы сделать эту работу? LD_PRELOAD_32, LD_PRELOAD_64? Спасибо!
Я хотел бы использовать скрипт, который проверяет оберточную разрядность приложения и установить библиотеку соответственно – user3159253
Старайтесь не указывать полный путь. Динамический компоновщик выбирает правильный, например. LD_PRELOAD = lib_init.so – kofemann
@kofemann это именно то, что я искал. Не могли бы вы ответить на этот вопрос, чтобы я мог его одобрить. –