使用libfreenect2构建

时间:2016-05-30 21:31:53

标签: c++ build cmake

是否有人能够发布一个如何编译使用libfreenect2的代码的简单示例?安装库后,在我的主目录中创建以下结构:

→ tree freenect2 
freenect2
├── include
│   └── libfreenect2
│       ├── config.h
│       ├── export.h
│       ├── frame_listener.hpp
│       ├── frame_listener_impl.h
│       ├── libfreenect2.hpp
│       ├── logger.h
│       ├── packet_pipeline.h
│       └── registration.h
└── lib
    ├── cmake
    │   └── freenect2
    │       └── freenect2Config.cmake
    ├── libfreenect2.so -> libfreenect2.so.0.2
    ├── libfreenect2.so.0.2 -> libfreenect2.so.0.2.0
    ├── libfreenect2.so.0.2.0
    └── pkgconfig
        └── freenect2.pc

我尝试使用与pkg-config维基百科页面上类似的行编译.pc文件:

gcc -o test test.c $(pkg-config --libs --cflags libpng)

但是出现了这个错误:

./test: error while loading shared libraries: libfreenect2.so.0.2: cannot open shared object file: No such file or directory

显然,我搞砸了某个地方的编译过程,但我不知道在哪里看,因为这是在运行时发生的错误,而不是在编译时。还有一个使用库安装创建的.cmake文件,我相信这会导致更强大和更合适的解决方案,但我不完全确定如何使用它并且无法找到简单的指南显示如何这样做。任何有关初学者友好文档的链接也不胜感激。在libfreenect2的文档中,它说在编译cmake -Dfreenect2_DIR=$HOME/freenect2/lib/cmake/freenect2时使用这一行 - 这是我在创建库或创建应用程序时必须使用的东西吗?

另一个与切向相关的问题是,将/include/lib目录分别移至/usr/local/include/usr/local/lib会更好吗?我相信会在系统范围内“安装”库,但我想有一些原因,libfreenect2不能自动执行,我不确定是什么。

1 个答案:

答案 0 :(得分:1)

好吧,我只使用cmake和我创建的CMakeLists.txt文件。这样做:

创建一个CMakeLists.txt文件:

cmake_minimum_required(VERSION 2.8 FATAL_ERROR)
project("My Project")

set(CMAKE_CXX_FLAGS "-std=c++11")

find_package(freenect2 REQUIRED)

include_directories("/usr/include/libusb-1.0/")

INCLUDE_DIRECTORIES(
  ${freenect2_INCLUDE_DIR}
)

add_executable(main ./main.cpp)

target_link_libraries(main ${freenect2_LIBRARIES})

在这个文件中,我假设我们要编译使用main.cpp的{​​{1}}文件。因此,在您的本地目录中使用终端创建libfreenect2文件夹:

build

然后,在终端中运行命令:

mkdir build && cd build

这应该在build文件夹中创建cmake -Dfreenect2_DIR=$HOME/freenect2/lib/cmake/freenect2 .. && make 可执行文件。 请注意,此cmake命令指定freenect2目录。在这种情况下,我假设它被放置在main目录中。

但是,我知道必须输入那个长cmake命令或在终端历史记录中搜索它可能对某些人来说很无聊。因此,可以嵌入这样的命令:

/home

之后,只需在终端中运行:     mkdir build&& cd build&& cmake ..&制作

This回答是第二种编译代码方式的来源。

希望这有帮助!