编译成功后找不到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库的主要内容,如果未能解决你的问题,请参考以下文章
Mac安装Scrapy教程及安装成功后找不到Scrapy解决