I have find out that to load libraries, a executable first opens /lib/ld-linux-x86-64.so.2. All the functionality regarding loading shared libraries (search in many paths, using rpath, etc) will work only after ld-linux is loaded, because it is ld-linux that implements these functionality.
It seemed to me that ld-linux.so location is hardcoded in executable (invoking strings on my executable reinforces this theory). My problem is that in my linux distribution, the compiler (g++) sets the ld-linux location to /lib/ld-linux-x86-64.so.2. While on Ubuntu (which is more popular) it is located at /lib/x86_64-linux-gnu/ld-linux-x86-64.so.2.
I was wondering if I can make my executable looks for ld-linux.so at /lib/x86_64-linux-gnu/ld-linux-x86-64.so.2(which is also present in my distro as a symbolic link).
Try adding -Wl,--dynamic-linker=/lib/x86_64-linux-gnu/ld-linux-x86-64.so.2 to your LDFLAGS.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With