I just downloaded a tar
file that is supposed to include everything required to run a program that we can call some_binary
. I extracted it's contents, and I see the following:
- A binary (let's call it
some_binary
) - A
lib
folder with various dynamic libraries (.so files) such as/lib/ld-linux-x86-64.so
- and a shell script called
some_binary.sh
The script has the following contents:
#!/bin/bash
`dirname "$0"`/lib/ld-linux-x86-64.so.2 `dirname "$0"`/some_binary "$@"
and running it as ./some_binary.sh some arguments
seems to run ./some_binary
correctly. Oddly enough, running the following script:
#!/bin/bash
LD_LIBRARY_PATH=$CWD/LIB:$LD_LIBRARY_PATH
./some_binary "$@"
as ./my_script.sh some arguments
does not work. It results in relocation errors (undefined symbols), presumably from incorrectly loading the libraries under ./lib
Moreover, running the following two statements from the command line results in segmentation fault
:
> LD_LIBRARY_PATH=$CWD/LIB:$LD_LIBRARY_PATH
> ./some_binary some arguments
With this, my questions are:
- What does the first script do?
- Why do I get different results across these three attempts? and why can't I just add
$pwd/lib
toLD_LIBRARY_PATH
and then runsome_binary
directly?