【问题标题】:Undefined Reference but Library Linked未定义的引用但库链接
【发布时间】:2017-08-03 21:50:13
【问题描述】:

我目前正在尝试添加此处找到的 RaspiCam 库:

https://sourceforge.net/projects/raspicam/?source=typ_redirect

到此处找到的 Apriltags 库:

http://people.csail.mit.edu/kaess/apriltags/

我解压缩 RaspiCam 库并单独构建它,然后将其复制并粘贴到 AprilTags 文件夹中。我的 AprilTags 文件夹现在看起来像这样:

AprilTags build cmake CMakeLists.txt example LICENSE Makefile pod-build raspicam-0.1.6 README.txt src systems.txt tags

在 raspicam-0.1.6 文件夹内是这样的:

build Changelog CMakeLists.txt CMakeLists.txt.user cmake_uninstall.cmake.in dependencies README src utils

我将来自 raspicam 的库添加到 AprilTags 代码的顶部标记为:

#include <raspicam/raspicam_cv.h>

它会在我构建时检测到它。我知道这一点是因为我故意把库写错了,例如。 raspicam_cvv.h,它给了我一个错误,因为没有这样的库。所以它肯定链接。但是,当我尝试在代码中使用该库时,例如

raspicam::RaspiCam_Cv Camera;

它给出了这个错误:

CMakeFiles/apriltags_demo.dir/apriltags_demo.cpp.o: In function `main':
apriltags_demo.cpp:(.text.startup+0x2d4): undefined reference to `raspicam::RaspiCam_Cv::RaspiCam_Cv()'
apriltags_demo.cpp:(.text.startup+0x324): undefined reference to `raspicam::RaspiCam_Cv::~RaspiCam_Cv()'
apriltags_demo.cpp:(.text.startup+0x384): undefined reference to `raspicam::RaspiCam_Cv::~RaspiCam_Cv()'
collect2: error: ld returned 1 exit status
example/CMakeFiles/apriltags_demo.dir/build.make:139: recipe for target 'bin/apriltags_demo' failed
make[3]: *** [bin/apriltags_demo] Error 1
CMakeFiles/Makefile2:193: recipe for target 'example/CMakeFiles/apriltags_demo.dir/all' failed
make[2]: *** [example/CMakeFiles/apriltags_demo.dir/all] Error 2
Makefile:127: recipe for target 'all' failed
make[1]: *** [all] Error 2
Makefile:27: recipe for target 'all' failed
make: *** [all] Error 2

作为未定义的引用。我在网上做了一些研究,在这里找到了一个类似的查询:library is linked but reference is undefined 解决方案是更改链接的顺序。但是,因为这两个项目都是使用 CMake 构建的,所以我不知道您将如何更改链接顺序。老实说,总的来说,我在使用 C++ 构建方面有点迷茫,因此非常感谢任何帮助或指导。谢谢!

【问题讨论】:

    标签: c++ static-linking undefined-reference


    【解决方案1】:

    注意 - 如果可以的话,我会发表评论,需要更多代表:

    • 您是否尝试过“”而不是 用于您的包含? 用于预定义目录,而 "" 遵循相对路径

    • 这似乎是一项多余的检查,但您是否确保在同一目录中同时拥有库的 .lib 和相应的 .h 文件?很多人都有 .lib,但缺少 lib 的 .h

    当我忘记做这两个中的任何一个时,我遇到了这个问题,无论是在 cmake 中还是通过 vstudio 在 Visual c++ 中

    【讨论】:

    • 是的,我在 raspberry 文件夹中有 .h 文件和 .lib 文件。将 更改为 "" 也会产生相同的错误。
    猜你喜欢
    • 2011-12-08
    • 2014-12-11
    • 1970-01-01
    • 2020-08-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-09-07
    相关资源
    最近更新 更多