CMAKE无法找到OpenNI。

6
我一直在尝试使用Kinect库运行“入门教程”(http://nicolas.burrus.name/index.php/Research/KinectUseNestk),但是我遇到了一个错误。
当我在CLI中尝试以下行:
cmake -DCMAKE_BUILD_TYPE=RelWithDebInfo ..

我收到了以下错误:
CMake Error at D:/Program Files/CMake 2.8/share/cmake-2.8/Modules/FindPackageHan
dleStandardArgs.cmake:91 (MESSAGE):
Could NOT find OpenNI (missing: OPENNI_LIBRARY OPENNI_INCLUDE_DIR)

Call Stack (most recent call first):
D:/Program Files/CMake 2.8/share/cmake-2.8/Modules/FindPackageHandleStandardAr
gs.cmake:252 (_FPHSA_FAILURE_MESSAGE)
nestk/cmake/FindOpenNI.cmake:51 (find_package_handle_standard_args)
nestk/cmake/find_nestk_deps.cmake:77 (FIND_PACKAGE)
build/nestk/UseEmbeddedNestk.cmake:23 (INCLUDE)
nestk/CMakeLists.txt:67 (INCLUDE)

有没有人知道我该如何解决这个问题?我已经安装了OpenNI,它安装在D:\Program Files\OpenNI。

4个回答

6

如果你想使用CMAKE构建OpenNI项目,可以在你的cmakelists中写入以下代码。这个方法非常有效。(我也包括了NITE2,但如果你不需要它,只需删除这些行即可)。

OPTION (ENABLE_OPENNI2_NITE2 ON)

IF( ENABLE_OPENNI2_NITE2 )
set(OPENNI2_DEFINITIONS ${PC_OPENNI_CFLAGS_OTHER})
FIND_LIBRARY( OPENNI2_LIBRARY
             NAMES OpenNI2
             HINTS ${PC_OPENNI2_LIBDIR} ${PC_OPENNI2_LIBRARY_DIRS} /usr/lib
             PATHS "$ENV{PROGRAMFILES}/OpenNI2/Lib${OPENNI2_SUFFIX}" "$ENV{PROGRAMW6432}/OpenNI2/Lib${OPENNI2_SUFFIX}" "$ENV{PROGRAMW6432}/OpenNI2"
             PATH_SUFFIXES lib lib64
)
FIND_PATH( OPENNI2_INCLUDE_DIR OpenNI.h
          HINTS ${PC_OPENNI2_INCLUDEDIR} ${PC_OPENNI2_INCLUDE_DIRS} 
                  /usr/include/openni2 /usr/include/ni2
                  PATHS "$ENV{PROGRAMFILES}/OpenNI2/include" "$ENV{PROGRAMW6432}/OpenNI2/include"
          PATH_SUFFIXES openni2 ni2)

FIND_LIBRARY( NITE2_LIBRARY
             NAMES NiTE2
             HINTS ${PC_OPENNI2_LIBDIR} ${PC_OPENNI2_LIBRARY_DIRS} /usr/lib
             PATHS "$ENV{PROGRAMFILES}/PrimeSense/NiTE2/lib${OPENNI2_SUFFIX}" "$ENV{PROGRAMW6432}/PrimeSense/NiTE2/lib${OPENNI2_SUFFIX}"
             PATH_SUFFIXES lib
)
FIND_PATH( NITE2_INCLUDE_DIR NiTE.h
          HINTS ${PC_OPENNI2_INCLUDEDIR} ${PC_OPENNI2_INCLUDE_DIRS} /usr/include/openni2 /usr/include/nite2
          PATHS "$ENV{PROGRAMFILES}/PrimeSense/NiTE2/include" "$ENV{PROGRAMW6432}/PrimeSense/NiTE2/include"
          PATH_SUFFIXES openni2         
)
ENDIF( ENABLE_OPENNI2_NITE2 )

之后你需要链接找到的目录和库:

link_directories( ${OPENNI2_LIBRARY} ${NITE2_LIBRARY} )
INCLUDE_DIRECTORIES( ${OPENNI2_INCLUDE_DIR} ${NITE2_INCLUDE_DIR} )
target_link_libraries( project ${OPENNI2_LIBRARY} ${NITE2_LIBRARY} )

2
你可以尝试修改CMakeLists.txt文件并添加或修改以下行。
set(OPENNI_INCLUDE_DIR "D:/Program Files/OpenNI/Include")
set(OPENNI_LIB_DIR "D:/Program Files/OpenNI/Lib")

否则,在二进制文件夹中寻找名为CMakeCache.txt的文件。查找OPENNI_INCLUDE_DIR和OPENNI_LIB_DIR,设置正确路径,然后再次运行cmake。
如果以上方法都无效,并且您可以运行cmake-gui,请尝试在GUI中手动指定这些路径。
希望对您有所帮助!

0

典型的openni2发行版包含以下文件/OpenNI-Linux-Arm-2.2/OpenNIDevEnvironment

它描述了所有必要的变量以进行编译和链接:

export OPENNI2_INCLUDE=/opt/cbox/OpenNI-Linux-Arm-2.2/Include
export OPENNI2_REDIST=/opt/cbox/OpenNI-Linux-Arm-2.2/Redist

所以您需要导出这些变量,然后使用启用OpenNI2的cmake运行:

$export OPENNI2_INCLUDE=/opt/cbox/OpenNI-Linux-Arm-2.2/Include
$export OPENNI2_REDIST=/opt/cbox/OpenNI-Linux-Arm-2.2/Redist
$cmake -D CMAKE_BUILD_TYPE=RELEASE -D CMAKE_INSTALL_PREFIX=/usr/local -D WITH_OPENNI2=ON  ..

在cmake的结果中,您应该看到以下内容:
-- OpenNI2: YES (ver 2.2.0, build 33)

0

请确保 OPEN_NI_BIN、OPEN_NI_INCLUDE 和 OPEN_NI_INSTALL_PATH 环境变量都已设置,并且它们指向正确的位置,因为检查 OPEN_NI 的 cmake 模块会检查这些值。 我曾经遇到过同样的错误,但是我的情况是由于混合使用了 64 位和 32 位库所导致的。我使用 32 位编译器构建 opencv,但是 OpenNI 是 64 位的。因此,我卸载了所有的 64 位版本,只留下了 32 位版本,这样就解决了问题。

祝好, Daniel


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接