Linux程序在运行时找不到共享库

Sco*_*ott 8 c++ linux installer id3 g++

我正在尝试编译一个linux程序,id3v2,它说它无法找到合适的库:

id3v2: error while loading shared libraries: libid3-3.8.so.3: cannot open shared object file: No such file or directory
Run Code Online (Sandbox Code Playgroud)

我猜这是拉入lidid3库的部分?

文件存在,但是,他们正在寻找的实际上是一个符号链接:

"ibid3-3.8.so.3.0.0"

我想知道它是否是一个无法遵循符号链接的问题?也许我可以手动更改它以寻找0.0,如果我知道我想要改变它.

我很乐意澄清任何细节.

看起来包含是按以下方式完成的:

id3v2:  convert.o list.o id3v2.o genre.o
        ${CXX} ${LDFLAGS} -pedantic -Wall -g -o $@ $^ -lz -lid3
Run Code Online (Sandbox Code Playgroud)

我能够使用西蒙的建议来弄清楚有多个地方可能会有人想到一个图书馆.我创建了一个符号链接,程序链接到ACTUAL文件.

谢谢西蒙!

Sda*_*ons 28

只要它们跟踪的最终目标存在且可访问,库上的符号链接就可以正常工作.

您已经构建了一个动态链接的可执行文件,希望在执行时与libid3-3.8.so.3链接.这可能在构建阶段与之类似-L/path/to/libid3/directory -lid3.

你有几个选项,使libid3可用,在一般递减的优先顺序(因为你没有提到该文件是,我只能算是一般):

  • libid3*/etc/ld.so.conf(或/lib/usr/lib)中列出的目录中创建符号链接
  • 复制libid3*/etc/ld.so.conf(或/lib/usr/lib)中列出的目录(默认值)
  • 添加包含目录libid3*,以/etc/ld.so.conf
  • LD_LIBRARY_PATH=/directory/path/to/libid3*在运行id3v2可执行文件之前设置.
  • id3v2静态重新编译.(它会起作用,但不要打扰.)

在前3个中的任何一个之后,重新运行ldconfig以便更新链接器缓存.(然后您可以运行ldconfig -v以验证它是否可解析.)

请注意,这些不是步骤,它们是选项.你只需要做其中的一个.

很高兴您更新了标题. #include指令与链接无关.


Kri*_*sor 5

我遇到了和你一样的错误,在阅读了这里提到的解决方案后,我解决了这个问题(在 Ubuntu 8 上):

sudo ln -s /usr/local/lib/libid3-3.8.so.3 /usr/lib/libid3-3.8.so.3
Run Code Online (Sandbox Code Playgroud)