有什么区别:
代码示例: 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)
执行上述两种方法时,哪种方法更好/更有效?
答案 0 :(得分:2)
使用dlopen()
,链接器永远不会为您工作。在使用dlsym()
进行调用之前,您必须手动查找每个函数。这使得来自共享对象的函数的每个调用站点比仅执行普通调用并让链接器对其进行排序更复杂。
答案 1 :(得分:2)
使用方法2(链接器),如果缺少库,则整个程序不会启动。使用方法1(dlopen
),您可以优雅地处理错误,让程序保持运行。 dlopen
用于某些特殊情况,例如加载插件或启动可选功能。