Linux Program can't find Shared Library at run-time

后端 未结 3 1167
隐瞒了意图╮
隐瞒了意图╮ 2021-02-08 08:10

I\'m trying to compile a linux program, id3v2, and it says it is can\'t find the appropriate library:

id3v2: error while loading shared libraries: libid3-3.8.so         


        
相关标签:
3条回答
  • 2021-02-08 08:52

    I got the same error you did, and after reading the solutions mentioned here, I resolved the problem (on Ubuntu 8) with:

    sudo ln -s /usr/local/lib/libid3-3.8.so.3 /usr/lib/libid3-3.8.so.3
    
    0 讨论(0)
  • 2021-02-08 08:57

    Symlinks on libraries work fine, as long as the final target they trace to exists and is accessible.

    You have built a dynamically-linked executable, that wishes to be linked against libid3-3.8.so.3 at execution time. This was likely linked during the build phase with something like -L/path/to/libid3/directory -lid3.

    You have a few options to make libid3 available, in generally decreasing order of preference (since you didn't mention where the file was, I can only be general):

    • Create a symlink to libid3* in a directory listed in /etc/ld.so.conf (or /lib or /usr/lib)
    • Copy libid3* to a directory listed in /etc/ld.so.conf (or /lib or /usr/lib) (defaults)
    • Add the directory containing libid3* to /etc/ld.so.conf
    • Set LD_LIBRARY_PATH=/directory/path/to/libid3* before running your id3v2 executable.
    • Recompile id3v2 statically. (It will work, but don't bother.)

    After any of the first 3, rerun ldconfig so the linker cache is updated. (You can then run ldconfig -v to verify it's resolvable.)

    Note those aren't steps, they're options. You only need to do 1 of them.

    Glad you updated the title. #include directives have nothing to do with linking.

    0 讨论(0)
  • 2021-02-08 09:02

    This solved the issue Just add /usr/local/lib to /etc/ld.so.conf (unless it's already in there; only put it once), then run ldconfig.

    0 讨论(0)
提交回复
热议问题