On Wed, Sep 21, 2005 at 03:17:27PM +0400, Alexey Tourbin wrote: > Вот упрощенная реализация проверки ELF'ов, как я её себе представляю. > err="$(ldd -r "$elf" 2>&1 1>/dev/null)" || return Я пришел к выводу, что `ldd -r' не очень хорошо подходит для этой проверки. Есть несколько проблем, связанных со спецификой проверки в %buildroot. В частности, ldd не позволяет "перебить" rpath. Вот альтернативная реализация `ldd -r'. RTLD=/lib/ld-linux.so.2 RTLD_libpath=/lib:/usr/lib:/usr/X11R6/lib elf1_libpath() { local elf="$1" local libpath="$RTLD_libpath" [ -z "$LD_LIBRARY_PATH" ] || libpath="$LD_LIBRARY_PATH:$libpath" [ -z "$RPM_FINDPROV_LIB_PATH" ] || libpath="$RPM_FINDPROV_LIB_PATH:$libpath" local info= rpath= info="$(objdump -p "$elf")" || return rpath="$(echo "$info" |awk '($1=="RPATH"){printf "%s:", $2}')" [ -z "$rpath" ] || libpath="$rpath$libpath" if [ -n "$RPM_BUILD_ROOT" ]; then local BR_libpath= path= IFS=: for path in $libpath; do BR_libpath="$BR_libpath:$RPM_BUILD_ROOT$path" done libpath="${BR_libpath#:}:$libpath" fi [ "$libpath" = "$RTLD_libpath" ] || echo "${libpath%%:$RTLD_libpath}" } elf1_ldd() { local elf="$1" libpath= libpath="$(elf1_libpath "$elf")" || return LD_TRACE_LOADED_OBJECTS=1 LD_WARN=yes LD_BIND_NOW=yes LD_VERBOSE= \ "$RTLD" --library-path "$libpath" --inhibit-rpath "$elf" "$elf" }