Linux程序在运行时找不到共享库
题
我正在尝试编译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。
不隶属于 StackOverflow