一,异常
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)
第二种解决办法:
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掉。
如果对您有所帮助的话
不妨加个关注,点个赞哈,您的每个小小举动都是对我莫大的支持!