1

我正在尝试为使用opencv的android(最终也在IOS上)编写一个统一插件。

我设法使用 Android NDK Toolchain to arm7 架构将普通的 helloworld.cpp 编译到共享库中,我也对 x86 执行相同操作,并将生成的 *.so 包含到 Plugin/Android/libs/x86 & Plugin/Android/ libs/armeabi-v7a,它运行良好(我返回了一个简单的整数并查看了 logcat 上的日志)。

问题是,一旦我尝试编译我的 c++ 代码并链接 Opencv4Android 的静态库(编译返回一个相对较胖的共享库,没有任何问题),但是一旦我运行统一生成的 apk,我得到 dllExceptionNotFound

这是我用来将 cpp 代码编译到所有 android 架构的脚本

#!/bin/bash
ANDROID_NDK_HOME=$(dirname "$(locate ndk-build | head -1)")
APP_ABI=android-9
target="ARMV7"
arch="arch-arm"
CCFolder="arm-linux-androideabi-4.9"
CC="arm-linux-androideabi-g++"


SYSROOT=${ANDROID_NDK_HOME}/platforms/${APP_ABI}/${arch}
command="${ANDROID_NDK_HOME}/toolchains/${CCFolder}/prebuilt/linux-x86_64/bin/${CC} --sysroot=$SYSROOT"

CPP_SRC="cpp/opencvTest.cpp"
ANDROID_LIB="libmylib.so"
OPENCV_INCLUDE="-I./opencv/include"
OPENCV_STATIC="-L./opencv/libs/armv7a \
                -lopencv_calib3d \
                -lopencv_highgui \
                -lopencv_video \
                -lopencv_objdetect \
                -lopencv_imgproc \
                -lopencv_imgcodecs \
                -lopencv_core -ldl"

SYSROOT=${ANDROID_NDK_HOME}/platforms/${APP_ABI}/${arch}
command="${ANDROID_NDK_HOME}/toolchains/${CCFolder}/prebuilt/linux-x86_64/bin/${CC} --sysroot=$SYSROOT"

exec $($command $CPP_SRC -shared $OPENCV_INCLUDE -I$ANDROID_NDK_HOME/sources/cxx-stl/stlport/stlport -L$ANDROID_NDK_HOME/sources/cxx-stl/stlport/libs/${STL_PORT} -lstlport_static -fPIC -o ./libs/Android/libs/armv7a/$ANDROID_LIB -Wl,--whole-archive $OPENCV_STATIC -Wl,--no-whole-archive)

另外,根据我对静态链接的理解,我不需要复制.a,因为编译步骤会这样做,对吗?我对所有这些都是新手,所以任何帮助表示赞赏。

4

0 回答 0