我试图为使用opencv的android(最终也在IOS上)编写一个Unity插件。
我设法将一个普通的helloworld.cpp编译成一个使用Android NDK工具链到arm7架构的共享库,我也为x86做了同样的事情,并将结果* .so包含在Plugin / Android / libs / x86&插件/ Android / libs / armeabi-v7a,它工作正常(我返回一个简单的整数,看着logcat上的日志)。
一旦我尝试编译我的c ++代码并链接Opencv4Android的静态库(编译返回一个相对较胖的共享库而没有任何问题),问题, 但是一旦我运行了由unity生成的apk,我就会得到dllExceptionNotFound
这是我用来编译所有Android架构的cpp代码的脚本
#!/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,因为编译步骤确实如此,这是正确的吗? 我对所有这些都很新,所以感谢任何帮助。