在 Qt Android 项目中使用 OpenCV 时的链接顺序 [重复]
Posted
技术标签:
【中文标题】在 Qt Android 项目中使用 OpenCV 时的链接顺序 [重复]【英文标题】:Link-order when using OpenCV in Qt Android project [duplicate] 【发布时间】:2014-12-17 14:49:50 【问题描述】:我正在尝试在从 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'
【问题讨论】:
【参考方案1】:对于任何可能有同样问题的人,这是 OpenCV 的正确顺序。我在c:\Workspace\OpenCV-2.4.10-android-sdk\sdk\native\jni\OpenCVModules_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
【讨论】:
以上是关于在 Qt Android 项目中使用 OpenCV 时的链接顺序 [重复]的主要内容,如果未能解决你的问题,请参考以下文章
是否可以为 android 编译 Qt+QML+OpenCV 应用程序