java - JNI怎么链接已经写好的C++编写的动态库文件.so
ringa_lee
ringa_lee 2017-04-18 10:28:03
0
1
365

JNI怎么链接已经写好的C++编写的动态库文件.so

ringa_lee
ringa_lee

ringa_lee

全員に返信(1)
洪涛

CMake を例に挙げます:

プリコンパイルされたライブラリはすでにビルドされているため、IMPORTED フラグを使用して、プロジェクトにインポートするだけでよいことを CMake に伝える必要があります。 リーリー

次に、以下のコードのように、set_target_properties() コマンドを使用してライブラリへのパスを指定する必要があります。

リーリー set_target_properties() 命令去指定库的路径,就像下面的代码那样。

add_library( imported-lib
             SHARED
             IMPORTED )

为了让 CMake 在编译时期能找到你的头文件,你需要使用 include_directories() 命令,并且将你的头文件地址传进去:

set_target_properties( # Specifies the target library.
                       imported-lib
                       # Specifies the parameter you want to define.
                       PROPERTIES IMPORTED_LOCATION
                       # Provides the path to the library you want to import.
                       imported-lib/src/${ANDROID_ABI}/libimported-lib.so )

在 CMake 构建脚本中使用 target_link_libraries() CMake がコンパイル中にヘッダー ファイルを見つけるには、 include_directories() コマンドを使用して、ヘッダー ファイルのアドレスを次のように渡す必要があります。 リーリー

CMake ビルド スクリプトで target_link_libraries() コマンドを使用して、ビルド済みライブラリをローカル ライブラリに関連付けます。 リーリー

APP をビルドすると、Gradle はインポートされたライブラリを APK に自動的にパッケージ化します。 APK Analyzerを使用して確認できます。

ただし、ソース コードを入手できる場合は、特定のプラットフォームと互換性がない可能性があるため、.so にリンクすることはお勧めしません。たとえば、Linux プラットフォームでコンパイルされた .so ダイナミック ライブラリは、arm プラットフォーム (Android など) では実行できません。

参考:

  • Android Studio 2.2 で C/C++ を楽しんでください

  • 汎用 ELF での再配置 (EM: 62) 間違った解決策

いいねを押す +0
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート