Android串口通信UnsatisfiedLinkError和libserial_port.so: has text relocations异常

1,322 阅读1分钟

一,异常

1,使用Google串口调试开源库App,调试串口出现以下异常:

2,AndroidStudio的logcat打印报错信息:UnsatisfiedLinkError: dlopen failed: /data/app/com.smart.vendor.serialport.library-1/lib/arm/libserial_port.so: has text relocations

二,解决办法:

在Android.mk文件中加入: LOCAL_LDFLAGS += -fPIC,重新编译Google开源库的源码,生成.so库

#
# Copyright 2009 Cedric Priscal
# 
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
# 
# http://www.apache.org/licenses/LICENSE-2.0
# 
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License. 
#

LOCAL_PATH := $(call my-dir)

include $(CLEAR_VARS)

TARGET_PLATFORM := android-3
LOCAL_MODULE    := serial_port
LOCAL_SRC_FILES := SerialPort.c
LOCAL_LDLIBS    := -llog

#加入如下信息
LOCAL_LDFLAGS += -fPIC

include $(BUILD_SHARED_LIBRARY)

重新编译好的.so库

第二种解决办法:

module下的build.gradle 把targetSdkVersion 改为22以下(也就是Android 6.0以下版本);在Android 6.0之前,text reloactions的问题,会在编译的过程中,作为warning报出来;在Android 6.0以上版本,原来的warning被升级为error了。因此,同样的库文件,在Android 6.0前的环境运行,不报错;6.0及以上版本就会crash掉。

 

如果对您有所帮助的话

不妨加个关注,点个赞哈,您的每个小小举动都是对我莫大的支持!