【实用工具】借助adb在android机上测试

文章目录

          • 1、CANNOT LINK EXECUTABLE解决方案
          • 2、使用预编译动态库模块
            • 2.1 申明预编译模块
            • 2.2 引用预编译模块
            • 2.3 构建动态库模块

1、CANNOT LINK EXECUTABLE解决方案

在android机器上运行可执行文件时,出现错误:“CANNOT LINK EXECUTABLE解决方案”
解决办法:

1、修改系统链接库路径LD_LIBRARY_PATH,使其包含链接文件
2、将链接文件放至设备的/system/lib/和/system/bin/目录下
3、dlopen、dlsym等动态装载库

参考网址:https://blog.csdn.net/u012171394/article/details/84732690

2、使用预编译动态库模块
2.1 申明预编译模块
   对于Android编译工具而言,每个预编译库必须声明为一个独立的模块。例如: libc.so 文件与 Android.mk 位于同一个目录中,则可以这样定义该动态库:
LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
LOCAL_MODULE := libc
LOCAL_SRC_FILES := libc.so
LOCAL_EXPORT_C_INCLUDES := $(LOCAL_PATH)/libc
include $(PREBUILT_SHARED_LIBRARY)

注意:LOCAL_EXPORT_C_INCLUDES定义确保了任何依赖这个预编译库的模块
会自动在自己的LOCAL_C_INCLUDES 变量中增加到这个预编译库的include目
录的路径,从而能够找到其中的头文件。
预编译模块不需要编译,因此可以大大减少编译耗时。libc.so预编译模块会被拷贝到 $PROJECT/obj/local 下面,同时还会被拷贝到 $PROJECT/lib/下。

2.2 引用预编译模块

通过第一步申明了预编译模块之后,如果test.c依赖于libc.so。即可以使用LOCAL_SHARED_LIBRARIES列出当前模块的依赖列表。

include $(CLEAR_VARS)
LOCAL_MODULE := test
LOCAL_SRC_FILES:= test.c
LOCAL_SHARED_LIBRARIES := libc
include $(BUILD_EXECUTABLE)
2.3 构建动态库模块
include $(CLEAR_VARS)#这一步操作主要是清空之前定义的LOCAL_XXX开头的变量,是必须要的操作
LOCAL_C_INCLUDES:=$(LOCAL_PATH)/include  #定义源文件所需的头文件所需的目录
LOCAL_MODULE:=libhello-android #定义编译出来的模块名
LOCAL_SHARED_LIBRARIES := liblog  #编译此模块需要依赖的动态库
LOCAL_SRC_FILES := src/hello-android.c #定义编译模块所需的源文件
include $(BUILD_SHARED_LIBRARY)

参考网址:https://blog.csdn.net/yikunbai5708/article/details/102995104

你可能感兴趣的:(实用工具)