编译成功后找不到openni2库

Posted

技术标签:

【中文标题】编译成功后找不到openni2库【英文标题】:Can't find openni2 library after successful compilation 【发布时间】:2014-06-18 20:52:45 【问题描述】:

我正在尝试使用 opencv 查看 openni 颜色和深度帧,并且我已经能够编译代码:

g++ `pkg-config opencv --cflags` -I /home/myaccount/Downloads/OpenNI/Include/ testing.cpp -o newtest -L /home/myaccount/Downloads/OpenNI/Redist/ -lOpenNI2 `pkg-config opencv --libs`

但是当我运行 ./newtest 时,出现以下错误:

./newtest: error while loading shared libraries: libOpenNI2.so: cannot open shared object file: No such file or directory

我不知道发生了什么,如果有任何帮助/建议,我将不胜感激。

谢谢

【问题讨论】:

运行 ldd newtest 以查看它期望在哪里找到 libOpenNI2.so。您可能需要将库放在工作目录中。 @piedar - 它只显示 libOpenNI2.so => 未找到 openni 并且大多数其他库位于 /lib 和 /usr/lib 中。你想看完整的输出吗? 如果将 newtest 移至 /home/myaccount/Downloads/OpenNI/ 会发生什么? @piedar - 当我将文件移动到 OpenNI 目录时,我得到了同样的错误。 抱歉,试试/home/myaccount/Downloads/OpenNI/Redist/。如果这不起作用,您可能需要对rpath 进行一些研究。不幸的是,我理解得不够好,无法解释。 【参考方案1】:

我遇到了类似的问题,并解决了它,如下所述。您没有说是哪个发行版,但如果在 Ubuntu 上,您需要将共享库的“Redist”位置添加到链接器配置文件中。所以创建一个新文件:

$ sudo gedit /etc/ld.so.conf.d/openni2.conf

/<your-custom-shared-lib-location>/Redist/

请注意,您只需要在文件中添加路径而不是 PATH 变量。然后运行

sudo ldconfig

makefile 中的 -L 是指在编译时链接您的共享库。对于运行时链接,您需要上述内容。据我了解,仅当您的库不在默认位置 /usr/local/lib 中时才需要这样做。这将告诉链接器在运行时为您的共享库包含这些路径。

【讨论】:

【参考方案2】:

我遇到了类似的问题,我把这个文件复制到了我之前设置的程序的链接目录中。像$PROJECT_SOURCE_DIR/lib 这样就可以了。

首先尝试定位libOpenNI2.so 的位置。 locate libOpenNI2.so 然后或将此文件复制到我的程序链接目录。而且我认为 将此文件复制到系统的链接目录,如usr/lib,它也可以。

【讨论】:

以上是关于编译成功后找不到openni2库的主要内容,如果未能解决你的问题,请参考以下文章

ldd 说编译成功完成后找不到库

使用外部库找不到入口点错误

Mac安装Scrapy教程及安装成功后找不到Scrapy解决

Pyinstaller - 编译应用程序后找不到 libmagic

更新到 vs2017 15.2 后找不到 C 头文件

Electron Atom - 编译后找不到模块“Node-Windows”