好了,我安装了“vowpal wabbit”包,也用“make test”测试了一下,显示一切正常,但是当我在终端输入“vw”时,出现了以下错误:
vw: error while loading shared libraries: libvw.so.0: cannot open shared object file: No such file or directory
我的系统是 ubuntu12.04-64bit。有人能告诉我如何解决这个问题吗?谢谢
答案1
从来回的消息来看,您似乎已将库安装在 /usr/local/lib 中。但您的应用程序不知道在那里查找该库。
您可以通过几种方式解决这个问题。
您可以在配置/构建项目时提供特殊标志,以指示二进制文件签入 /usr/local/lib。如果您知道如何在构建时设置标志,则应设置
LDFLAGS=-Wl,-rpath,/usr/local/lib
。但这会让您重新构建。运行时链接器会查看名为的环境变量,
LD_LIBRARY_PATH
以确定在查找共享库时要检查哪些目录。在这种情况下,如果您键入export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/local/lib
并运行程序,它应该可以正常工作。如果您有多个程序需要 /usr/local/lib 目录,并且您觉得将其包含到每个程序中都是安全的,则可以将运行时链接器设置为每次都尝试 /usr/local/lib。您可以放入文件
/etc/ld.so.conf.d
或编辑/etc/ld.so.conf
以添加 /usr/local/lib。这会影响系统上的每个可执行文件,因此我认为这个方法非常先进。
简而言之,你需要告诉你的程序如何找到这个库。目前最简单的方法是使用以下命令设置变量LD_LIBRARY_PATH
:export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/local/lib
答案2
更新:我正在从源代码设置“Quagga”。安装后,当我运行它时,我收到错误“无法打开共享对象文件:没有这样的文件或目录”。就我的情况而言,是缺少“libzebra.so.0”。
我使用了 Rich 在上述评论中建议的“导出”方法。
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/opt/foobar/lib
其中“/opt/foobar/lib”是您的应用程序特定的共享库文件夹。对我来说,它是“/usr/local/lib/”
但是,它并没有解决我的问题。然后,为了更新共享库缓存,我不得不ldconfig
重建共享库缓存。我找到了这个 Github 帖子,您还可以阅读详细信息如何添加库目录 - toldconfig 缓存