13

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

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

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

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

“同上3-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 的建议来找出人们可能期望图书馆的多个地方。我在程序链接到 ACTUAL 文件的地方创建了一个符号链接。

谢谢西蒙!

4

3 回答 3

35

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

您已经构建了一个动态链接的可执行文件,它希望在执行时链接到 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指令与链接无关。

于 2011-01-21T02:26:54.817 回答
6

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

sudo ln -s /usr/local/lib/libid3-3.8.so.3 /usr/lib/libid3-3.8.so.3
于 2011-10-03T05:49:10.567 回答
2

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

于 2013-01-15T20:39:20.333 回答