1

opencv を使用する Android (最終的には IOS でも) 用の Unity プラグインを作成しようとしています。

Android NDK ツールチェーンを使用して共有ライブラリにコンパイルされた通常の helloworld.cpp を arm7 アーキテクチャに取得することができました。x86 についても同じことを行い、結果の *.so を Plugin/Android/libs/x86 & Plugin/Android/ に含めました。 libs/armeabi-v7a で、問題なく動作しました (単純な整数を返し、logcat のログを調べました)。

問題は、C++ コードをコンパイルして Opencv4Android の静的ライブラリをリンクしようとするとすぐに発生します (コンパイルは問題なく比較的太い共有ライブラリを返します)、しかし、unity によって生成された 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