Вызов сценария с ld-linux.so?

Попробуйте комментарий 60 от RH Bugzilla 466607.

3
24.04.2013, 06:00
1 ответ

Программа идет со своим собственным динамическим загрузчиком. Довольно редко для программ нуждаться в их собственном динамическом загрузчике: обычно тот в Вашей системе будет работать также. Это может быть необходимо, если программа была связана против стандартной библиотеки кроме GNU libc или если это было связано против GNU libc скомпилированный со странными настройками.

Может быть достаточно сказать загрузчик, где найти предпочтительные библиотеки программы. Ваша попытка почти делает это, но не совсем. Если LD_LIBRARY_PATH уже не находится в среде, затем присвоение LD_LIBRARY_PATH=$CWD/LIB:$LD_LIBRARY_PATH только определяет переменную оболочки, не переменную среды, таким образом, программа не видит вещь. Кроме того, $CWD обычно расширяется до пустой строки, Вы, вероятно, имели в виду $PWD или лучше $(dirname "$0") (т.е. каталог, содержащий сценарий). Также остерегайтесь этого, Вы использовали lib и LIB несовместимо в Вашем вопросе. Попробовать

#!/bin/sh
export LD_LIBRARY_PATH="$(dirname "$0")/lib:$LD_LIBRARY_PATH"
exec "$(dirname "$0")/some_binary" "$@"

или лучше, чтобы не иметь пустую запись в конце LD_LIBRARY_PATH если это не было определено прежде (это может быть плохо, потому что пустая запись обозначает текущий каталог, хотя в конце пути только вредно, если библиотека не найдена, где это должно быть):

#!/bin/sh
export LD_LIBRARY_PATH="$(dirname "$0")/lib:$LD_LIBRARY_PATH"
case "$LD_LIBRARY_PATH" in *:) LD_LIBRARY_PATH=${LD_LIBRARY_PATH%:};; esac
exec "$(dirname "$0")/some_binary" "$@"
3
27.01.2020, 21:24

Теги

Похожие вопросы