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)

在执行上述两种方法时,哪种方法更好/更有效?

4

2 回答 2

2

使用dlopen(),链接器永远不会为您工作。在使用 调用它之前,您必须手动查找每个函数dlsym()。这使得来自共享对象的函数的每个调用点比仅仅进行普通调用并让链接器对其进行排序更复杂。

于 2013-03-19T14:21:44.233 回答
2

使用方法 2(链接器),如果缺少库,则整个程序不会启动。使用方法 1 ( dlopen),您可以优雅地处理错误,让程序继续运行。dlopen用于一些特殊情况,比如加载插件,或者启动可选功能。

于 2013-03-19T14:23:36.047 回答