我正在尝试编译Linux程序ID3V2,它说找不到合适的库:

id3v2: error while loading shared libraries: libid3-3.8.so.3: cannot open shared object file: No such file or directory

我猜这是拉动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

我能够使用Simon的建议来弄清楚有多个景点可能会期待图书馆。我创建了一个符号链接,该程序正在其中链接到实际文件。

谢谢西蒙!

有帮助吗?

解决方案

只要它们要追踪并且可以访问,库的符号链接就可以正常工作。

您已经构建了一个动态链接的可执行文件,希望在执行时与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 为了验证它是可分解的。)

请注意,这些不是步骤,它们是选择。您只需要做1个即可。

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

其他提示

我遇到了相同的错误,在阅读了这里提到的解决方案后,我解决了问题(在Ubuntu 8上):

sudo ln -s /usr/local/lib/libid3-3.8.so.3 /usr/lib/libid3-3.8.so.3

这解决了问题,只需将/usr/local/lib添加到/etc/ld.so.conf(除非它已经在那里;只插入一次),然后运行ldconfig。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top