2

違いは何ですか:

  1. dlfcn.h で利用可能な dlopen() を使用した共有ライブラリのロード
  2. 実行可能ファイルのビルド中に共有ライブラリを Android.mk ファイルに含めます。

コード例: Android.mk ファイル:

LOCAL_PATH:= $(call my-dir)
include $(CLEAR_VARS)
LOCAL_SRC_FILES:=     \
    test.c

LOCAL_SHARED_LIBRARIES := \ libtest

LOCAL_MODULE:= test
LOCAL_MODULE_TAGS := eng
LOCAL_MODULE_PATH := $(TARGET_OUT_OPTIONAL_EXECUTABLES)

include $(BUILD_EXECUTABLE)

上記の2つの方法を実行している間、実装のより良い/より効率的な方法はどれですか?

4

2 に答える 2

2

ではdlopen()、リンカーは決して機能しません。を使用して呼び出す前に、各関数を手動で検索する必要がありますdlsym()。これにより、共有オブジェクトからの関数の各呼び出しサイトが、単純な呼び出しを行ってリンカーに整理させるよりも複雑になります。

于 2013-03-19T14:21:44.233 に答える
2

方法 2 (リンカ) では、ライブラリが見つからない場合、プログラム全体が起動しません。方法 1 ( dlopen) を使用すると、エラーを適切に処理して、プログラムを実行したままにすることができます。dlopenプラグインのロードやオプション機能の開始など、いくつかの特別な場合に使用されます。

于 2013-03-19T14:23:36.047 に答える