【发布时间】:2019-06-30 06:59:15
【问题描述】:
我正在尝试使用 cmake 编译一个简单的项目,同时使用 raspicam 库。项目编译完美;但是,最后我有 ld 错误。 Raspicam 从这里下载:http://www.uco.es/investiga/grupos/ava/node/40。有什么想法吗?
main.cpp:
#include <raspicam_cv.h>
int main ( int argc,char **argv ) {
raspicam::RaspiCam_Cv capture;
if (!capture.open()) {
return 1;
}
return 0;
}
CMakeLists.txt:
cmake_minimum_required(VERSION 3.10)
project(raspicam)
set(CMAKE_CXX_STANDARD 17)
include_directories(raspicam-0.1.6/src)
link_directories(raspicam-0.1.6/src)
add_executable(raspicam main.cpp)
set(RASPICAM_LIB ${CMAKE_SHARED_LIBRARY_PREFIX}raspicam_cv${CMAKE_SHARED_LIBRARY_SUFFIX})
target_link_libraries(raspicam ${RASPICAM_LIB})
构建命令:
cd raspicam-0.1.6/ && cmake -DOpenCV_DIR=/home/user/Projects/opencv/opencv-build . && make && cd .. && cmake . && make
错误:
CMakeFiles/raspicam.dir/main.cpp.o: In function `main':
/home/user/CLionProjects/raspicam/main.cpp:5: undefined reference to `raspicam::RaspiCam_Cv::RaspiCam_Cv()'
/home/user/CLionProjects/raspicam/main.cpp:7: undefined reference to `raspicam::RaspiCam_Cv::open()'
/home/user/CLionProjects/raspicam/main.cpp:5: undefined reference to `raspicam::RaspiCam_Cv::~RaspiCam_Cv()'
/home/user/CLionProjects/raspicam/main.cpp:5: undefined reference to `raspicam::RaspiCam_Cv::~RaspiCam_Cv()'
collect2: error: ld returned 1 exit status
CMakeFiles/raspicam.dir/build.make:94: recipe for target 'raspicam' failed
make[2]: *** [raspicam] Error 1
CMakeFiles/Makefile2:67: recipe for target 'CMakeFiles/raspicam.dir/all' failed
make[1]: *** [CMakeFiles/raspicam.dir/all] Error 2
Makefile:83: recipe for target 'all' failed
make: *** [all] Error 2
【问题讨论】:
-
raspicam库是在没有CMAKE_CXX_STANDARD设置的情况下构建的,因此您可能需要从项目中删除该设置。 -
这个选项只给出c++17的警告,链接器会受这个影响吗?
-
设置
CMAKE_CXX_STANDARD会影响某些函数的命名空间。因为命名空间直接影响为函数生成的符号名称,它对链接器的影响很大。 -
我已经删除它并得到同样的错误。