[英]Linux Program can't find Shared Library at run-time
我正在尝试编译一个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文件。
谢谢西蒙!
只要它们跟踪的最终目标存在且可访问,库上的符号链接就可以正常工作。
您已经构建了一个动态链接的可执行文件,希望在执行时与libid3-3.8.so.3链接。 这可能在构建阶段与-L/path/to/libid3/directory -lid3
。
你有一些选项可以使libid3
可用,通常按优先顺序递减(因为你没有提到文件的位置,我只能是通用的):
/etc/ld.so.conf
(或/lib
或/usr/lib
)中列出的目录中创建libid3*
的符号链接 libid3*
复制到/etc/ld.so.conf
(或/lib
或/usr/lib
)中列出的目录(默认值) libid3*
的目录添加到/etc/ld.so.conf
LD_LIBRARY_PATH=/directory/path/to/libid3*
。 id3v2
。 (它会起作用,但不要打扰。) 在前3个中的任何一个之后,重新运行ldconfig
以更新链接器缓存。 (然后,您可以运行ldconfig -v
来验证它是否可解析。)
请注意,这些不是步骤,它们是选项。 你只需要做其中的一个。
很高兴您更新了标题。 #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 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.