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

时间:2011-01-21 01:44:23

标签: c++ linux installer g++ id3

我正在尝试编译一个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

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

谢谢西蒙!

3 个答案:

答案 0 :(得分:27)

图书馆上的符号链接工作正常,只要它们追踪的最终目标存在且可以访问。

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

相关联

您有一些选项可以使libid3可用,通常按优先顺序递减(因为您没有提到文件的位置,我只能是一般的):< / p>

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

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

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

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

答案 1 :(得分:3)

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

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

答案 2 :(得分:2)

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