【问题标题】:Can't find openni2 library after successful compilation编译成功后找不到openni2库
【发布时间】: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 进行一些研究。不幸的是,我理解得不够好,无法解释。

标签: c++ linux opencv openni


【解决方案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,它也可以。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-12-12
      • 2016-10-28
      相关资源
      最近更新 更多