在Qt Android项目中使用OpenCV时的链接顺序
Link-order when using OpenCV in Qt Android project
我正在尝试在从Qt Creator构建的Qt Android项目中使用OpenCV。
我使用预构建的OpenCV-2.4.10-android-sdk
,从它们的大小来看,我链接到静态库。现在我收到链接器错误,并且由于链接顺序在 GCC 中很重要,我怀疑它们是因为我的链接顺序不正确(库按字母顺序排列(。
那么正确的链接顺序是什么,考虑到我在 Windows 上交叉编译,我该如何找到它?
这是来自我的 .pro 文件:
LIBS += -L"c:/Workspace/OpenCV-2.4.10-android-sdk/sdk/native/libs/armeabi-v7a"
-L"c:/Workspace/OpenCV-2.4.10-android-sdk/sdk/native/3rdparty/libs/armeabi-v7a"
LIBS +=
-lopencv_core
-lopencv_features2d
-lopencv_flann
-lopencv_highgui
-lopencv_imgproc
-lopencv_legacy
-lopencv_ml
-lopencv_objdetect
-lopencv_ocl
-lopencv_photo
-lopencv_stitching
-lopencv_superres
-lopencv_ts
-lopencv_video
-lopencv_videostab
-lIlmImf
-llibjasper
-llibjpeg
-llibpng
-llibtiff
-ltbb
这就是我现在收到的错误:
c:/Workspace/OpenCV-2.4.10-android-sdk/sdk/native/libs/armeabi-v7a/libopencv_core.a(parallel.cpp.o):parallel.cpp:function tbb::interface6::internal::start_for<tbb::blocked_range<int>, (anonymous namespace)::ProxyLoopBody, tbb::auto_partitioner const>::~start_for(): error: undefined reference to 'vtable for tbb::task'
对于任何可能遇到相同问题的人来说,这是OpenCV的正确顺序。我在c:WorkspaceOpenCV-2.4.10-android-sdksdknativejniOpenCVModules_armeabi_v7a.cmake
中找到了它:
foreach(_expectedTarget libtiff libjpeg libjasper libpng IlmImf tbb opencv_core opencv_androidcamera opencv_flann opencv_imgproc opencv_highgui opencv_features2d opencv_calib3d opencv_ml opencv_objdetect opencv_video opencv_contrib opencv_photo opencv_java opencv_legacy opencv_ocl opencv_stitching opencv_superres opencv_ts opencv_videostab)
当按照该foreach
中给出的顺序编译时,它们起作用了。我找不到任何可以给我正确顺序的工具,至少对于Windows上的Android NDK来说不是。
所以这就是 LIBS 条目的外观:
LIBS += -L"c:/Workspace/OpenCV-2.4.10-android-sdk/sdk/native/libs/armeabi-v7a"
-L"c:/Workspace/OpenCV-2.4.10-android-sdk/sdk/native/3rdparty/libs/armeabi-v7a"
LIBS +=
-llibtiff
-llibjpeg
-llibjasper
-llibpng
-lIlmImf
-ltbb
-lopencv_core
-lopencv_androidcamera
-lopencv_flann
-lopencv_imgproc
-lopencv_highgui
-lopencv_features2d
-lopencv_calib3d
-lopencv_ml
-lopencv_objdetect
-lopencv_video
-lopencv_contrib
-lopencv_photo
-lopencv_java
-lopencv_legacy
-lopencv_ocl
-lopencv_stitching
-lopencv_superres
-lopencv_ts
-lopencv_videostab
相关文章:
- 编译器找不到链接的 OpenCV 库
- 如何在 CentOS 中链接 OpenCV 库
- 将 Android 上的错误与 OpenCV 3.4.0 和 NDK 链接
- opencv 3.0 Visual Studio Community 2017 编译链接错误
- Opencv 链接 CMAKE 不起作用 Ubuntu 16.04 Docker
- 使用 opencv 和 C++ - 未定义的引用的链接器出现问题
- 使用Visual Studio项目使Opencv可移植,并删除链接错误
- 用于链接 OpenCV 和现有库的生成文件(不使用 cmake)
- 无法将OpenCV Android链接在QT中
- Alpine Docker容器中的简单OPENCV程序上的链接器错误
- OpenCV源与CUDA编译生成多个定义链接错误
- CMAKE:导入时链接 OpenCV 失败
- MacOSX的Opencv Xcode链接器错误
- OPENCV链接库 - 未定义的参考
- 为什么 Unity 在与 OpenCV 链接时无法加载安卓原生库
- OPENCV链接错误 - Win32 & VS2012
- 更新后库的 OpenCV 链接器错误
- 在fftw3 Visual Studio 2010中使用openCV链接器错误
- Linux c++中的Opencv链接器
- 为什么情绪分类不能按照 openCV 链接中指定的方式工作?