未定义的引用但是库链接

时间:2017-03-13 18:41:47

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

我目前正在尝试添加此处的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 ++构建方面有点迷失,因此非常感谢任何帮助或指导。谢谢!

1 个答案:

答案 0 :(得分:0)

注意 - 如果可以,我会将此作为评论,需要更多代表:

  • 您是否尝试过“&lt;&gt;为你的包括? &LT;&GT;用于预定义目录,而“”遵循相对路径

  • 这可能看起来像是一个多余的检查,但你确定你在同一目录中同时拥有.lib和相应的.h文件吗?很多人都有.lib,但缺少.h的lib

当我忘记使用这两个中的任何一个时,无论是在cmake中还是在Visual c ++中通过vstudio

,我都会遇到这个问题