首页 > 解决方案 > 如何在编译时包含本地编译的 C++ 库?

问题描述

我已经成功编译了这个库https://github.com/xdspacelab/openvslam,但是我现在将它包含在 C++ 程序中时遇到了麻烦。

这是最终的目录结构:

.
├── 3rd
├── build
├── camera_params
├── cmake
├── docs
├── example
├── frames
├── frames_to_localise
├── maps
├── orb_vocab
├── ros
├── src
├── test
├── videos
└── viewer

现在这是我使用的命令:

cd /path/to/openvslam
mkdir build && cd build
cmake \
    -DBUILD_WITH_MARCH_NATIVE=ON \
    -DUSE_PANGOLIN_VIEWER=OFF \
    -DUSE_SOCKET_PUBLISHER=ON \
    -DUSE_STACK_TRACE_LOGGER=ON \
    -DBOW_FRAMEWORK=DBoW2 \
    -DBUILD_TESTS=ON \
    ..
make -j4

根据文档,https://openvslam.readthedocs.io/en/master/installation.html#subsection-common-linux-macos

我的理解是,这会在本地安装库而不是在系统范围内(例如在 /usr/local/bin 中)。

所以我尝试编译一个如果他们的例子https://github.com/xdspacelab/openvslam/blob/master/example/run_image_localization.cc

像这样:g++ run_image_localization.cc我得到这个错误:

In file included from run_image_localization.cc:2:
./util/image_util.h:19:33: warning: defaulted function definitions are a C++11 extension [-Wc++11-extensions]
    virtual ~image_sequence() = default;
                                ^
run_image_localization.cc:10:10: fatal error: 'openvslam/system.h' file not found
#include "openvslam/system.h"
         ^~~~~~~~~~~~~~~~~~~~
1 warning and 1 error generated.

有道理,因为openvslam不包括在内。我尝试了不同的标志,例如 -L、-I 等,但到目前为止没有任何效果。有没有标准的解决方案?

PS:临时解决方案是VERBOSE = 1在运行 make 时设置并复制粘贴用于编译示例的命令...该命令有 40 多行,在我的终端上呈现命令比编译 .cc 需要更多时间文件...

编辑:我使用的是 Mac

标签: c++makefilecmake

解决方案


推荐阅读