4

こんにちは、OpenGL デスクトップ アプリを Android に移植しようとしています。私は Android 開発の知識がないので、Qt Creator に依存してアプリをパッケージ化しています。セットアップの一環として、次の設定で Android ndk の「make-standalone-toolchain」スクリプトを呼び出しました。

--platform=android-21 
--toolchain=arm-linux-androideabi-4.9 
--system=linux-x86_64

次に、android-cmake を使用して、新しく作成したスタンドアロン ツールチェーンのパスを渡しました。これにより、assimp ディレクトリ ツリー内に libassimp.so、libassimp.so.3、および libassimp.so.3.1.1(ln) が作成されました。

libassimp.so パスを Qt Creator プロジェクトのビルド メニューの「追加ライブラリ」の下に渡しました。ただし、アプリを Android にデプロイすると、次のエラーでクラッシュします。

 dlopen("/data/app/org.qtproject.example.a3dqtquick-2/lib/arm/lib3dqtquick.so", RTLD_LAZY) failed: dlopen failed: could not load library "libassimp.so.3" needed by "lib3dqtquick.so"; caused by library "libassimp.so.3" not found

../android-build/libs/armeabi-v7a のプロジェクト ビルド ディレクトリ内に libassimp.so (libassimp.so.3 ではない) ファイルも表示されます。

ここからどこへ行けばよいかわからないため、手動で libassimp.so.3 をこの場所に配置しても問題は解決しません。読んでくれてありがとう。私はあなたのフィードバックにさらに情報を追加します. これは私の最初のアンドロイドの実験であるため、情報不足を許してください。

以下は、deployment-settings.json ファイルです。

  "description": "This file is generated by qmake to be read by androiddeployqt and should not be modified by hand.",
   "qt": "/home/ubashir/programs/Qt/5.4/android_armv7",
   "sdk": "/home/ubashir/programs/android-sdk-linux",
   "sdkBuildToolsRevision": "21.1.2",
   "ndk": "/home/ubashir/programs/android-ndk-r10d",
   "toolchain-prefix": "arm-linux-androideabi",
   "tool-prefix": "arm-linux-androideabi",
   "toolchain-version": "4.9",
   "ndk-host": "linux-x86_64",
   "target-architecture": "armeabi-v7a",
   "qml-root-path": "/home/ubashir/code/3dqtquick",
   "application-binary": "/home/ubashir/code/3dqtquickAndroid/lib3dqtquick.so" 

アップデート:

私は今これを試しました.. assimp.so.3.1.1へのすべてのリンクを後者のコピーに置き換えて、私のライブラリlibassimp.so.3はlibassimp.so.3.1.1へのリンクではなくファイルになります。プロジェクトのサブフォルダー android/libs/aremabi-v71 に libassimp.so.3 を手動で追加しました --- ダメです。手動で追加したため、ビルド ディレクトリにすべての libassimp ファイルが表示されていることを確認したため、おそらく展開されていますが、エラーは残ります。

failed: dlopen failed: could not load library "libassimp.so.3" needed by "lib3dqtquick.so".

ここで概説されているようにhttp://webmail.dev411.com/p/gg/android-ndk/1386vger6e/use-assimp-c-library-in-ndk-ld-error-obj-local-armeabi-v7a-libassimp-so -vforia と互換性のないターゲット

Androidのassimpビルドディレクトリでcmakeを実行した後、link.txtファイルを編集し、エントリ-soname、libassimp.so.3を-soname、libassimp.soで変更しましたが、それでもlibassimp.so.3.1.1を作成しますlibassimp.so.3 と libassimp.so の 2 つのリンク。だからまだ立ち往生..

4

2 に答える 2

0

CMake for および Android プロジェクトで構築した共有ライブラリで同じ問題に遭遇しました。私はそれを修正する方法を見つけました。CMake に慣れていれば、よりクリーンなソリューションがあるかもしれません。

「SOVERSION」と「SET_TARGET_PROPERTIES()」の CMakeLists.txt ファイルを検索します。

SET_TARGET_PROPERTIES() ルーチンで、VERSION と SOVERSION の行を次のようにコメントアウトします。

SET_TARGET_PROPERTIES(${PROJECT_NAME} PROPERTIES                # create *nix style library versions + symbolic links
    DEFINE_SYMBOL DSO_EXPORTS
        #   VERSION ${PROJECT_VERSION}
        #   SOVERSION ${PROJECT_SOVERSION}
    CLEAN_DIRECT_OUTPUT 1                   # allow creating static and shared libs without conflicts
    OUTPUT_NAME "${PROJECT_NAME}${PROJECT_DLLVERSION}"  # avoid conflicts between library and binary target names
)

次に、CMake で構成と生成の手順を再実行し、ターゲットを再構築します。これにより、バージョン番号のない .so が得られるはずです。

于 2015-04-09T19:21:14.680 に答える
-1

私の問題に対して見つけた解決策を確認することをお勧めします(それはあなたのものと非常に似ています):

libgdal.so Android エラー: ライブラリ "libgdal.so.1" を読み込めませんでした

お役に立てれば。

于 2015-01-26T13:32:33.853 に答える