【问题标题】:Building with libfreenect2使用 libfreenect2 构建
【发布时间】:2016-09-28 18:25:24
【问题描述】:

谁能发布一个如何编译使用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 wikipedia 页面上类似的行来编译 .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 不会自动执行它是有原因的,我不确定那是什么。

【问题讨论】:

  • 像往常一样,当与不在标准位置的库链接时,您需要调整 RPATH 以使可执行文件工作,有数百万个示例如何使用 gcc 做到这一点。由于您不使用 CMake,.cmake 文件不相关,cmake 标签也是。

标签: c++ build cmake


【解决方案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})

在这个文件中,我假设我们要编译使用libfreenect2main.cpp 文件。因此,在您的本地目录中创建一个build 文件夹,使用终端

mkdir build && cd build

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

cmake -Dfreenect2_DIR=$HOME/freenect2/lib/cmake/freenect2 .. && make

这应该在构建文件夹中创建main 可执行文件。 请注意,此 cmake 命令指定 freenect2 目录。在这种情况下,我假设它被放置在/home 目录中。

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

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

set(CMAKE_CXX_FLAGS "-std=c++11")
# Set cmake prefix path to enable cmake to find freenect2
set(CMAKE_PREFIX_PATH ${CMAKE_PREFIX_PATH} $ENV{HOME}/freenect2/lib/cmake/freenect2)
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})

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

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

希望这会有所帮助!

【讨论】:

    猜你喜欢
    • 2019-11-20
    • 2017-02-22
    • 2017-08-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-12-29
    • 1970-01-01
    • 2016-11-16
    相关资源
    最近更新 更多