如何在64位安卓xp系统是32位还是64位中使用32位SO库

64位linux系统编译程序时可以链接32位的库吗?_linux吧_百度贴吧
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&签到排名:今日本吧第个签到,本吧因你更精彩,明天继续来努力!
本吧签到人数:0成为超级会员,使用一键签到本月漏签0次!成为超级会员,赠送8张补签卡连续签到:天&&累计签到:天超级会员单次开通12个月以上,赠送连续签到卡3张
关注:177,580贴子:
64位linux系统编译程序时可以链接32位的库吗?收藏
最近在做一个程序从windows移植到linux系统。客户提供的是64位linux机器。移植的程序编译时候要链接另一个软件的动态库。现在有点问题。移植的程序里面的头文件之类的都是针对提供动态库那款软件的32位程序设定的。结果我在64位机器安装那款软件的32位程序之后,编译移植的程序就出现类似下面的报错:/usr/bin/ld: skipping incompatible /home/test/proc/lib/libxxx.so when searching for -lxxx感觉这种应该是64位系统和32位的库兼容性问题造成的吧然后我换成64位的程序,移植的程序是能编译过了,结果运行时又因为本身是针对32位程序设计的,经常出现程序崩溃的现象。小白就想了解下是否能够在64位系统下链接32位的动态库不出错呢,这问题搞得头大。。。对linux又不是太懂。。。
linux培训选择达内,资深10年linux讲师悉心传授,linux项目实战+设备实操+名企内推.达内linux云计算培训将网络工程与linux运维相结合专门培养高端linux复合型人才.
为什么不直接在32位系统上开发交付32位版本呢?还是说你想把一个程序混搭成32和64位合体的怪物?
传送门:考虑下移植64的必要性后再做决定:http://
multilibs?
@32位技术。。。有主流multilib,debian7+的multiarch,anthon os2的不完全子系统还有arch的完全子系统。。。
64位可以编32位的程序出来,在各种FLAGS中增加 -m32 编出来的就是32位程序,连接时自然是找32位的共享库
ld -m elf_i386 --oformat elf32-i386
登录百度帐号推荐应用4497人阅读
Android(20)
背景知识:
对于64位系统的编译规则,可参考:
JAVA编译不分32bit和64bit(APK,JAR)
可执行文件,默认编译64位
动态库和静态库,默认同时编译32bit和64bit版本
通过LOCAL_MULTILIB可以指定特定模块编译32bit或64bit或都编译
JAVA加载JNI库(so文件)的规则:
如果APP需要加载的所有so都是32bit,则使用32bit方式加载so库;如果APP需要加载的so库中只要有一个so是64bit的,则必须以64bit方式加载so库;不能同时加载32bit和64bit的so库。
实际工程中,我们通常会遇到下面这样的场景:
A. APK有源码,SO库有源码 - 应用及so库我们都能自己编译出来
B. APK有源码,SO库没有源码 - 我们开发的应用使用了第三方的so库,如ScanService
C. APK和SO库都没有源码 - 预置第三方的应用(应用中包括so库)
对于场景A:
只要我们编译默认对应的APP和SO库(32bit+64bit)即可。
此种场景最为普通,本文不做详细讲解。
对于场景B:
如果APK需要加载的库里面有64bit的,则需要全部的库都使用64bit。
如果APK调用的第三方so库中有32bit的,则:要么让第三方提供64bit版本的so库,要么强制使所以的so库都使用32bit版本。
对于场景C:
使用特定的预置规则即可。
场景A范例:
APK的编译规则不需要设置LOCAL_MULTILIB
SO库的编译规则也不需要设置LOCAL_MULTILIB
所以,SO库就会同时编译出32bit和64bit版本,APK按照64bit方式调用so库
场景B范例:
APK的编译规则需要设置LOCAL_MULTILIB
SO库的编译规则需要指定64bit或32bit(本地编译或预置的都需要)
需要显示声明APK的JNI库
LOCAL_PATH:= $(call my-dir)
include $(CLEAR_VARS)
LOCAL_MODULE_TAGS := optional
LOCAL_CERTIFICATE := platform
LOCAL_SRC_FILES := $(call all-subdir-java-files)
LOCAL_JAVA_LIBRARIES := odm conscrypt sp
LOCAL_PACKAGE_NAME := PosService
LOCAL_JNI_SHARED_LIBRARIES := \
libmiscjni \
libttyjni \
libbarcodereader \
libHsmKil \
libHHPScanInterface \
libHSMDecoderAPI
LOCAL_MULTILIB := 32
include $(BUILD_PACKAGE)
其中某个本地编译so的规则:
LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
LOCAL_SRC_FILES := \
com_odm_tty.cpp
LOCAL_C_INCLUDES := $(JNI_H_INCLUDE)
LOCAL_SHARED_LIBRARIES := \
libcutils \
LOCAL_PRELINK_MODULE := false
LOCAL_MODULE_TAGS := optional
LOCAL_MODULE := libttyjni
LOCAL_MULTILIB := 32
include $(BUILD_SHARED_LIBRARY)
某个第三方so的规则:
LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
LOCAL_MODULE_TAGS := optional
LOCAL_MODULE_CLASS := SHARED_LIBRARIES
LOCAL_MODULE_SUFFIX := .so
LOCAL_MODULE := libHHPScanInterface
LOCAL_SRC_FILES := $(LOCAL_MODULE).so
LOCAL_MODULE_PATH := $(TARGET_OUT)/lib
LOCAL_MULTILIB := 32
include $(BUILD_PREBUILT)
场景C范例:
APK使用典型的预置应用规则
SO库不需要写预置规则
需要显示声明APK调用的SO库
LOCAL_PATH := $(my-dir)
include $(CLEAR_VARS)
LOCAL_MODULE := BaiduIME
LOCAL_MODULE_TAGS := optional
LOCAL_SRC_FILES := baidu_input_for_xiaomiV5.apk
LOCAL_MODULE_CLASS := APPS
LOCAL_MODULE_SUFFIX := $(COMMON_ANDROID_PACKAGE_SUFFIX)
LOCAL_CERTIFICATE := PRESIGNED
LOCAL_MULTILIB := 32
LOCAL_PREBUILT_JNI_LIBS := \
@lib/armeabi/libBDVoiceRecognitionClient_V1.so \
@lib/armeabi/libchiperencoder_v1_2_1.so \
@lib/armeabi/librabjni-1.so \
@lib/armeabi/libshare_v2.so
include $(BUILD_PREBUILT)
粗体部分是需要特别注意的地方。
&&相关文章推荐
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:149741次
积分:2298
积分:2298
排名:第16679名
原创:75篇
评论:16条
(1)(1)(2)(2)(3)(3)(2)(6)(2)(5)(1)(1)(2)(5)(5)(8)(1)(3)(3)(2)(1)(2)(1)(2)(2)(1)(2)(7)> 博客详情
摘要: android studio指定abi打包apk
今天给同事装自己的app时候出现个问题,说找不到xxxx.so,在我手机上是可以的。看错误报告发现,是在arm64-v8a里没有发现,突然想起来自己的.so是32位的,所以当安装时候会检测不到.so,查了资料发现,
android 在生成apk会包含7种abi包(armeabi,armeabi-v7a,x86,mips,arm64-v8a,mips64,x86_64),android系统在安装APK的时候,不会安装APK里面全部的SO库文件,而是会根据当前CPU类型支持的ABI,从APK里面拷贝最合适的SO库,并保存在APP的内部存储路径的&libs&下面。
所以如果想用32位的兼容64位的so包,需要在android studio上这样配置,去掉64位的包。
defaultConfig {
abiFilters "armeabi", "armeabi-v7a", "x86", "mips"
人打赏支持
码字总数 6183
支付宝支付
微信扫码支付
打赏金额: ¥
已支付成功
打赏金额: ¥

我要回帖

更多关于 安卓64位系统下载 的文章

 

随机推荐