1
votes

I have an ARM embedded system running Debian Wheezy. Some of the functionality of our custom written apps is separated into shared library files. We store our shared library files under /usr/local/lib.

The problem I am seeing is that one of our binaries is not starting up correctly as it can't load one of the shared libs from /usr/local/lib:

/usr/local/bin/daemon_watchdog: error while loading shared libraries: libroots-base.so.5.3: cannot open shared object file: No such file or directory

The file libroots-base.so.5.3 exists in /usr/local/lib. /usr/local/lib should be getting searched for libraries, as we have added an extra file in the directory /etc/ld.so.conf.d/ to specifically include /usr/local/lib. I've also run ldconfig to refresh the cache.

One clue could be that the file libroots-base.so.5.3 itself depends on other shared libraries. If I run an "ldd libroots-base.so.5.3" in /usr/local/lib, it shows that several of the referenced libraries are not being picked up:

    libboost_log.so.1.43.0 => not found
    libboost_thread.so.1.43.0 => not found
    libboost_system.so.1.43.0 => not found
    libPocoUtil.so.11 => not found
    libPocoFoundation.so.11 => not found
    libPocoDataSQLite.so.11 => not found
    libPocoData.so.11 => not found
    libgthread-2.0.so.0 => /usr/lib/arm-linux-gnueabihf/libgthread-2.0.so.0

(0x402f1000) libdbus-glib-1.so.2 => /usr/lib/arm-linux-gnueabihf/libdbus-glib-1.so.2 (0x4005c000)

However, the files listed as not found are definitely present in /usr/local/lib, e.g.

-rw-r--r-- 1 root root 821784 Nov 22 21:29 libboost_log.so.1.43.0

Furthermore if I manually set LD_LIBRARY_PATH to /usr/local/lib after the system has booted, I can run our binaries fine.

Can anyone suggest what could be wrong?

1
Wrong architecture? What does file libboost_log.so.1.43.0 tell you?tink
Try running your binary with LD_DEBUG=all and see if the output contains any clues. (LD_DEBUG=help might be useful for reducing the output.)scott
Are you setting /etc/ld.so.conf.d/ for hard-float linker?auselen
Thanks for the comments guys. @tink the libboost file is for ARMHF which is my target. auselen not sure what you mean. scott I'm experimenting with those options, no solution yet.fred basset

1 Answers

5
votes

Can anyone suggest what could be wrong?

If setting LD_LIBRARY_PATH solves the problem, it's almost certain that you didn't add /usr/local/lib to /etc/ld.so.conf.d/ correctly.

Which file in /etc/ld.so.conf.d/ did you add to?

Maybe you have a typo, or a trailing space, or something.