对'cv::xfeatures2d::SURF::create(double,int,int,bool,bool)和#x27;运行时 我正在使用QT创建者在英伟达Jexon Nano(Ubuntu 18.04 LTS)上创建一个应用程序。为此,我创建了自己的库(名为recolib),它使用opencv(版本3.4.6),然后在我的Qt应用程序项目中包括我的库
该库编译得很好,但当我尝试编译应用程序时,它达到了100%,然后出现以下错误:未定义对“cv::xfeatures2d::SURF::create(double,int,int,bool,bool)”的引用 请注意,调用此函数的类是我的库“recolib”的一部分 我用cmake构建了opencv,启用了非免费模块,并给出了正确的路径,opencv构建和安装都很好 此外,该应用程序在mac和ubuntu虚拟机上运行良好 以下是应用程序的Cmakelist.txt示例:对'cv::xfeatures2d::SURF::create(double,int,int,bool,bool)和#x27;运行时 我正在使用QT创建者在英伟达Jexon Nano(Ubuntu 18.04 LTS)上创建一个应用程序。为此,我创建了自己的库(名为recolib),它使用opencv(版本3.4.6),然后在我的Qt应用程序项目中包括我的库,opencv,cmake,surf,nvidia-jetson-nano,Opencv,Cmake,Surf,Nvidia Jetson Nano,该库编译得很好,但当我尝试编译应用程序时,它达到了100%,然后出现以下错误:未定义对“cv::xfeatures2d::SURF::create(double,int,int,bool,bool)”的引用 请注意,调用此函数的类是我的库“recolib”的一部分 我用cmake构建了opencv,启用了非免费模块,并给出了正确的路径,opencv构建和安装都很好 此外,该应用程序在mac和ubuntu虚拟机上运行良好 以下是应用程序的Cmakelist.txt示例: cmake_minimum
cmake_minimum_required(VERSION 3.0)
# Add folder where are supportive functions
set(CMAKE_MODULE_PATH ${CMAKE_CURRENT_SOURCE_DIR}/cmake)
set(CMAKE_INCLUDE_CURRENT_DIR ON)
set(CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} -std=c++11 -pthread -lm")
SET(CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE} -std=c++11 -pthread -lm")
...
find_package(OpenCV REQUIRED)
if(OPENCV_XFEATURES2D_FOUND)
message("xfeatures2d found")
endif()
...
SET(RECOLIB_DIR "${PROJECT_SOURCE_DIR}/libs/recotracking-recolib")
include_directories("${RECOLIB_DIR}/include")
if(WIN32)
link_directories("${RECOLIB_DIR}/build/Debug")
else()
link_directories("${RECOLIB_DIR}/build/")
endif()
SET(RECOLIB_LIBRARY recolib)
include_directories(${OPENCV_INCLUDE_DIRS})
...
include_directories(${CMAKE_CURRENT_SOURCE_DIR}/include)
FILE(GLOB_RECURSE RES_FILES "${CMAKE_CURRENT_SOURCE_DIR}/*.qrc")
FILE(GLOB_RECURSE SRC_FILES "${SRC_FOLDER}/*.cpp")
FILE(GLOB_RECURSE UI_FILES "${SRC_FOLDER}/*.ui")
FILE(GLOB_RECURSE HDR_FILES "${HDR_FOLDER}/*.h")
link_directories(${OpenCV_LIBRARY_DIRS})
message("opencv libs: ${OpenCV_LIBRARIES}")
add_executable(${execName} ${OS_BUNDLE}# Expands to WIN32 or MACOS_BUNDLE depending on OS
${RES_FILES} ${SRC_FILES} ${UI_FILES} ${HDR_FILES} ${META_FILES_TO_INCLUDE}
)
...
# Add the Qt5 Widgets for linking
if (APPLE)
target_link_libraries(${execName}
${OpenCV_LIBRARIES}
${AppKit}
${CoreAudio}
${AudioToolbox}
Qt5::Core
Qt5::Gui
Qt5::QuickControls2
Qt5::MultimediaWidgets
Qt5::Multimedia
Qt5::MultimediaPrivate
Qt5::Widgets
Qt5::Sql
${RECOLIB_LIBRARY})
else()
target_link_libraries(${execName}
${OpenCV_LIBRARIES}
Qt5::Core
Qt5::Gui
Qt5::QuickControls2
Qt5::MultimediaWidgets
Qt5::Multimedia
#Qt5::MultimediaPrivate
Qt5::Widgets
Qt5::Sql
${RECOLIB_LIBRARY})
endif()
在Qt creator下执行它得到的输出如下:
Running "/usr/bin/cmake -E server --pipe=/tmp/cmake-Bg9h0e/socket --experimental" in /home/bookbeo-novatech/build-recotracking-app-Desktop-Release.
Starting to parse CMake project, using: "-DCMAKE_BUILD_TYPE:STRING=Release", "-DCMAKE_CXX_COMPILER:STRING=/usr/bin/g++", "-DCMAKE_C_COMPILER:STRING=/usr/bin/gcc", "-DCMAKE_PREFIX_PATH:STRING=/usr", "-DQT_QMAKE_EXECUTABLE:STRING=/usr/lib/qt5/bin/qmake".
-std=c++11 -pthread -lm
The C compiler identification is GNU 7.4.0
The CXX compiler identification is GNU 7.4.0
Check for working C compiler: /usr/bin/gcc
Check for working C compiler: /usr/bin/gcc -- works
Detecting C compiler ABI info
Detecting C compiler ABI info - done
Detecting C compile features
Detecting C compile features - done
Check for working CXX compiler: /usr/bin/g++
Check for working CXX compiler: /usr/bin/g++ -- works
Detecting CXX compiler ABI info
Detecting CXX compiler ABI info - done
Detecting CXX compile features
Detecting CXX compile features - done
Looking for pthread.h
Looking for pthread.h - found
Looking for pthread_create
Looking for pthread_create - not found
Looking for pthread_create in pthreads
Looking for pthread_create in pthreads - not found
Looking for pthread_create in pthread
Looking for pthread_create in pthread - found
Found Threads: TRUE
Found CUDA: /usr/local/cuda (found suitable exact version "10.0")
Found OpenCV: /usr/local (found version "3.4.6")
xfeatures2d found
opencv libs: opencv_calib3d;opencv_core;opencv_cudaarithm;opencv_cudabgsegm;opencv_cudacodec;opencv_cudafeatures2d;opencv_cudafilters;opencv_cudaimgproc;opencv_cudalegacy;opencv_cudaobjdetect;opencv_cudaoptflow;opencv_cudastereo;opencv_cudawarping;opencv_cudev;opencv_dnn;opencv_features2d;opencv_flann;opencv_highgui;opencv_imgcodecs;opencv_imgproc;opencv_ml;opencv_objdetect;opencv_photo;opencv_shape;opencv_stitching;opencv_superres;opencv_video;opencv_videoio;opencv_videostab;opencv_aruco;opencv_bgsegm;opencv_bioinspired;opencv_ccalib;opencv_cvv;opencv_datasets;opencv_dnn_objdetect;opencv_dpm;opencv_face;opencv_fuzzy;opencv_hfs;opencv_img_hash;opencv_line_descriptor;opencv_optflow;opencv_phase_unwrapping;opencv_plot;opencv_reg;opencv_rgbd;opencv_saliency;opencv_stereo;opencv_structured_light;opencv_surface_matching;opencv_text;opencv_tracking;opencv_xfeatures2d;opencv_ximgproc;opencv_xobjdetect;opencv_xphoto
Configuring done
Generating done
CMake Warning:
Manually-specified variables were not used by the project:
QT_QMAKE_EXECUTABLE
CMake Project was parsed successfully.
因此,正如您所看到的,除了pthread的一些问题(但似乎与主要问题无关),cmake配置看起来不错。找到Opencv和xfeatures2d
但当我构建应用程序时,在编译结束时,我得到:
[ 94%] Building CXX object CMakeFiles/recotracking-app.dir/recotracking-app_autogen/mocs_compilation.cpp.o
[ 97%] Building CXX object CMakeFiles/recotracking-app.dir/recotracking-app_autogen/EWIEGA46WW/qrc_resources.cpp.o
[100%] Linking CXX executable recotracking-app
/home/bookbeo/recotracking-app/libs/recotracking-recolib/build/librecolib.a(PCB.cpp.o): In function `reco::PCB::load(cv::Mat const&, cv::Mat const&, cv::Mat const&, std::vector<reco::RecoPoi, std::allocator<reco::RecoPoi> >)':
CMakeFiles/recotracking-app.dir/build.make:1045: recipe for target 'recotracking-app' failed
CMakeFiles/Makefile2:67: recipe for target 'CMakeFiles/recotracking-app.dir/all' failed
Makefile:83: recipe for target 'all' failed
/home/bookbeo-novatech/recotracking-app/libs/recotracking-recolib/src/PCB.cpp:47: undefined reference to `cv::xfeatures2d::SURF::create(double, int, int, bool, bool)'
collect2: error: ld returned 1 exit status
make[2]: *** [recotracking-app] Error 1
make[1]: *** [CMakeFiles/recotracking-app.dir/all] Error 2
make: *** [all] Error 2
10:51:49: Le processus "/usr/bin/cmake" s'est terminé avec le code 2.
Erreur lors de la compilation/déploiement du projet recotracking-app (kit : Desktop)
When executing step "CMake Build"
10:51:49: Temps écoulé : 06:59.
[94%]构建CXX对象CMakeFiles/recotracking app.dir/recotracking-app\u autogen/mocs\u compilation.cpp.o
[97%]构建CXX对象CMakeFiles/recotracking app.dir/recotracking-app_autogen/EWIEGA46WW/qrc_resources.cpp.o
[100%]链接CXX可执行文件跟踪应用程序
/home/bookbeo/recotracking app/libs/recotracking recolib/build/librecolib.a(PCB.cpp.o):在函数'reco::PCB::load(cv::Mat const&,cv::Mat const&,cv::Mat const&,std::vector')中:
CMakeFiles/recotracking app.dir/build.make:1045:目标“recotracking app”的配方失败
CMakeFiles/Makefile2:67:目标“CMakeFiles/recotracking app.dir/all”的配方失败
Makefile:83:目标“全部”的配方失败
/home/bookbeo novatech/recotracking app/libs/recotracking recolib/src/PCB.cpp:47:对“cv::xfeatures2d::SURF::create(double,int,int,bool,bool)”的未定义引用
collect2:错误:ld返回了1个退出状态
生成[2]:***[recotracking应用程序]错误1
生成[1]:***[CMakeFiles/recotracking app.dir/all]错误2
make:**[全部]错误2
10:51:49:Le processus“/usr/bin/cmake”是代码2的最新终端。
Erreur lors de la compilation/déploiement du projet recotracking应用程序(套件:桌面)
执行步骤“CMake构建”时
10:51:49:Tempsécoulé06:59。
我已经尝试重新构建opencv,它没有改变任何东西,而且似乎找到了模块xFeature2D,所以我不知道这个错误是从哪里来的
如果你有任何想法,我将非常感激
提前感谢。尝试make VERBOSE=1查看代码是否在VERBOSE=1的OpenCV库中实际链接,所有库的输出中都会出现xFeature2d:“/usr/local/lib/libopencv_xfeatures2d.so.3.4.6”尝试make VERBOSE=1查看代码是否在VERBOSE=1的OpenCV库中实际链接,xfeatures2d显示在所有库的输出中:“/usr/local/lib/libopencv_xfeatures2d.so.3.4.6”