android - 在 Qt Android 项目中使用 OpenCV 时的链接顺序

标签 android c++ windows qt opencv

<分区>

我正在尝试在我从 Qt Creator 构建的 Qt Android 项目中使用 OpenCV。

我使用预构建的 OpenCV-2.4.10-android-sdk,根据它们的大小判断,我正在链接到静态库。现在我遇到链接器错误,并且由于 GCC 中的链接顺序很重要,我怀疑这是因为我的链接顺序不正确(库按字母顺序排列)。

考虑到我在 Windows 上进行交叉编译,正确的链接顺序是什么?我该如何找到它?

这是来 self 的 .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:\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

关于android - 在 Qt Android 项目中使用 OpenCV 时的链接顺序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27528253/

相关文章:

Android phonegap 和 SockJS

java - 试图将 sqlite 数据库从 android 手机发送到 web 服务器

java - 如何让 Vista 的讲述人将我的 Swing 组件读回给我?

javascript - 如何在 Javascript 中获得透明的粘贴图像

c++ - Visual C++ - 检测程序是否加载到可视化调试器中

java - 总是返回 false 作为 boolean 值

android - 如何在 facebook sdk 4.4.0 android 中存储用户登录状态

c++ - MP4 文件的帧/像素数据偏移量?

c++ - 返回一个空的 C 字符串

c++ - 如何使用 C++ ADO 将 GUID 用作 ADO 查询参数