c++linuxinstallationg++id3

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


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: cannot open shared object file: No such file or directory

I'm guessing that this is the part that pulls in the lidid3 library?

The file DOES exist, however, what they are looking for is actually a symbolic link to:

"ibid3-3.8.so.3.0.0"

I'm wondering if it is an issue with it not being able to follow symbolic links? Perhaps I could manually change it to look for 0.0 if I knew where I was looking to change it.

I'm happy to clarify any details.

It looks like the includes are done in the following manner:

id3v2:  convert.o list.o id3v2.o genre.o
        ${CXX} ${LDFLAGS} -pedantic -Wall -g -o $@ $^ -lz -lid3

I was able to use Simon's advice to figure out that there were multiple spots where one might expect a library. I create a symbolic link where the program was linking to the ACTUAL file.

Thank you Simon!


Solution

  • 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):

    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.