I have a compiled project bin/MyProgram
that’s directed to bin/libs/
to load libraries with this in my config.make: PROJECT_LDFLAGS= -Wl,-rpath=./libs
. I can tell it’s working for all except one, libraw.so.20
:
libcurl.so.4 => ./libs/libcurl.so.4 (0x0000007f8ff30000)
libglfw.so.3 => ./libs/libglfw.so.3 (0x0000007f8fea0000)
libGLEW.so.2.2 => ./libs/libGLEW.so.2.2 (0x0000007f8fdc0000)
libGL.so.1 => ./libs/libGL.so.1 (0x0000007f8fcc0000)
libjxrglue.so.0 => /lib/aarch64-linux-gnu/libjxrglue.so.0 (0x0000007f8e010000)
libjpeg.so.62 => /lib/aarch64-linux-gnu/libjpeg.so.62 (0x0000007f8df90000)
libopenjp2.so.7 => /lib/aarch64-linux-gnu/libopenjp2.so.7 (0x0000007f8df10000)
libraw.so.20 => not found
libtiff.so.6 => /lib/aarch64-linux-gnu/libtiff.so.6 (0x0000007f8de70000)
libwebpmux.so.3 => /lib/aarch64-linux-gnu/libwebpmux.so.3 (0x0000007f8de40000)
libwebp.so.7 => /lib/aarch64-linux-gnu/libwebp.so.7 (0x0000007f8ddc0000)
<code>$ ldd MyProgram
libcurl.so.4 => ./libs/libcurl.so.4 (0x0000007f8ff30000)
libglfw.so.3 => ./libs/libglfw.so.3 (0x0000007f8fea0000)
libGLEW.so.2.2 => ./libs/libGLEW.so.2.2 (0x0000007f8fdc0000)
libGL.so.1 => ./libs/libGL.so.1 (0x0000007f8fcc0000)
... clipped for brevity
libjxrglue.so.0 => /lib/aarch64-linux-gnu/libjxrglue.so.0 (0x0000007f8e010000)
libjpeg.so.62 => /lib/aarch64-linux-gnu/libjpeg.so.62 (0x0000007f8df90000)
libopenjp2.so.7 => /lib/aarch64-linux-gnu/libopenjp2.so.7 (0x0000007f8df10000)
libraw.so.20 => not found
libtiff.so.6 => /lib/aarch64-linux-gnu/libtiff.so.6 (0x0000007f8de70000)
libwebpmux.so.3 => /lib/aarch64-linux-gnu/libwebpmux.so.3 (0x0000007f8de40000)
libwebp.so.7 => /lib/aarch64-linux-gnu/libwebp.so.7 (0x0000007f8ddc0000)
... clipped for brevity
</code>
$ ldd MyProgram
libcurl.so.4 => ./libs/libcurl.so.4 (0x0000007f8ff30000)
libglfw.so.3 => ./libs/libglfw.so.3 (0x0000007f8fea0000)
libGLEW.so.2.2 => ./libs/libGLEW.so.2.2 (0x0000007f8fdc0000)
libGL.so.1 => ./libs/libGL.so.1 (0x0000007f8fcc0000)
... clipped for brevity
libjxrglue.so.0 => /lib/aarch64-linux-gnu/libjxrglue.so.0 (0x0000007f8e010000)
libjpeg.so.62 => /lib/aarch64-linux-gnu/libjpeg.so.62 (0x0000007f8df90000)
libopenjp2.so.7 => /lib/aarch64-linux-gnu/libopenjp2.so.7 (0x0000007f8df10000)
libraw.so.20 => not found
libtiff.so.6 => /lib/aarch64-linux-gnu/libtiff.so.6 (0x0000007f8de70000)
libwebpmux.so.3 => /lib/aarch64-linux-gnu/libwebpmux.so.3 (0x0000007f8de40000)
libwebp.so.7 => /lib/aarch64-linux-gnu/libwebp.so.7 (0x0000007f8ddc0000)
... clipped for brevity
You can see that libcurl and others are found in ./libs
, other libraries are found system-wide, but libraw is not found even though it does exist in ./libs
. Why is my program not able to use libraw.so.20 specifically from my local ./libs directory?
My program does run without issue when export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/path/to/MyProgram
is set prior to running. It also does work when I install libraw system-wide. But I’m curious why libraw won’t run from ./libs.
I also checked its dependencies which seem accounted for:
<code>$ ldd ./libs/libraw.so.20
linux-vdso.so.1 (0x0000007f9c461000)
libjpeg.so.62 => /lib/aarch64-linux-gnu/libjpeg.so.62 (0x0000007f9c290000)
liblcms2.so.2 => /lib/aarch64-linux-gnu/liblcms2.so.2 (0x0000007f9c210000)
libstdc++.so.6 => /lib/aarch64-linux-gnu/libstdc++.so.6 (0x0000007f9bff0000)
libm.so.6 => /lib/aarch64-linux-gnu/libm.so.6 (0x0000007f9bf50000)
libc.so.6 => /lib/aarch64-linux-gnu/libc.so.6 (0x0000007f9bda0000)
/lib/ld-linux-aarch64.so.1 (0x0000007f9c424000)
libgcc_s.so.1 => /lib/aarch64-linux-gnu/libgcc_s.so.1 (0x0000007f9bd60000)
libgomp.so.1 => /lib/aarch64-linux-gnu/libgomp.so.1 (0x0000007f9bcf0000)
<code>$ ldd ./libs/libraw.so.20
linux-vdso.so.1 (0x0000007f9c461000)
libjpeg.so.62 => /lib/aarch64-linux-gnu/libjpeg.so.62 (0x0000007f9c290000)
liblcms2.so.2 => /lib/aarch64-linux-gnu/liblcms2.so.2 (0x0000007f9c210000)
libstdc++.so.6 => /lib/aarch64-linux-gnu/libstdc++.so.6 (0x0000007f9bff0000)
libm.so.6 => /lib/aarch64-linux-gnu/libm.so.6 (0x0000007f9bf50000)
libc.so.6 => /lib/aarch64-linux-gnu/libc.so.6 (0x0000007f9bda0000)
/lib/ld-linux-aarch64.so.1 (0x0000007f9c424000)
libgcc_s.so.1 => /lib/aarch64-linux-gnu/libgcc_s.so.1 (0x0000007f9bd60000)
libgomp.so.1 => /lib/aarch64-linux-gnu/libgomp.so.1 (0x0000007f9bcf0000)
</code>
$ ldd ./libs/libraw.so.20
linux-vdso.so.1 (0x0000007f9c461000)
libjpeg.so.62 => /lib/aarch64-linux-gnu/libjpeg.so.62 (0x0000007f9c290000)
liblcms2.so.2 => /lib/aarch64-linux-gnu/liblcms2.so.2 (0x0000007f9c210000)
libstdc++.so.6 => /lib/aarch64-linux-gnu/libstdc++.so.6 (0x0000007f9bff0000)
libm.so.6 => /lib/aarch64-linux-gnu/libm.so.6 (0x0000007f9bf50000)
libc.so.6 => /lib/aarch64-linux-gnu/libc.so.6 (0x0000007f9bda0000)
/lib/ld-linux-aarch64.so.1 (0x0000007f9c424000)
libgcc_s.so.1 => /lib/aarch64-linux-gnu/libgcc_s.so.1 (0x0000007f9bd60000)
libgomp.so.1 => /lib/aarch64-linux-gnu/libgomp.so.1 (0x0000007f9bcf0000)