is 32-bit instead of 64-bit动态库错误分析

在Android项目中遇到动态库`liblame.so`加载错误,提示为32位而非64位。问题源于混合使用了不同架构的库文件。Android系统在64位模式下运行时,会从对应abi目录加载库,导致32位与64位库混用。解决方案包括:1) 在`build.gradle`中设置`abiFilters`只包含32位架构;2) 创建`Application.mk`文件,指定生成64位库,并使用64位NDK进行编译。通过这些方法,可以避免32位与64位库的不兼容问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

        前段时间因项目需要,需要MP3格式的录音,需要引用LAME开源库,在引用so库文件时,提示java.lang.UnsatisfiedLinkError: dlopen failed: "liblame.so" is 32-bit instead of 64-bit错误,网上分析了出现这种情况的原因,可能是混合使用了32bit和64bit的库文件,如果系统先使用64bit的库文件时,则后续的库文件都是以64bit来加载执行,故会出现此问题。


   针对第三方应用,在它安装的时候,安装包管理器会检查该应用是否使用native libraries,如果使用本地库文件的话,则会根据相应的架构abi来选择是32bit还是64bit。


   针对系统应用来说,它的库文件存放在/system/lib,所以无法确定该应用是否依赖其他应用在system/lib下的库文件。因此安装包管理器,无法确定系统应用使用哪种架构abi,故在64bit模式下运行。


   当你安装应用到系统时,系统会从lib目录下的(armeabi, armeabi-v7a, arm64-v8a, x86, x86_64, mips64, mips)文件夹中查找本地库文件,不同的架构加载不同的文件夹下的库文件。例如64bit的架构从arm64-v8a、x86_64、mips64这些目录中加载。如果你的arm64-v8a文件夹下刚好有这个需要使用到的库文件,则不会从其他文件夹如

### 关于 PyDev Debugger 的 Python 编译不正确问题 当遇到 `pydev debugger: CRITICAL WARNING: This version of python seems to be incorrectly compiled` 这类警告时,通常是因为 Python 解释器的构建存在问题或者某些模块未被正确加载。可以通过以下方式解决: - 配置解释器参数 `-Xfrozen_modules=off` 可以有效缓解此类问题[^3]。此选项的作用是禁用冻结模块机制,从而允许动态加载更多模块并减少潜在冲突。 对于 TensorFlow 相关的错误信息 `tensorflow.python.framework.errors_impl.NotFoundError: ...beam_search_ops.so not found`,这通常是由于缺少必要的共享库文件或路径配置不当引起的。以下是可能的原因及解决方案: - **原因分析**: 如果 `.so` 文件缺失,则可能是安装过程中出现问题;如果存在但仍然报错,则需确认环境变量设置是否正确。 - **解决方案**: - 确认 TensorFlow 安装包是否完整,并重新安装指定版本的 TensorFlow 库。 ```bash pip install --upgrade tensorflow==<version> ``` - 检查系统中的依赖项(如 GCC 或 glibc 版本),确保它们满足当前 TensorFlow 要求。 - 添加自定义操作符所在的目录到 LD_LIBRARY_PATH 中: ```bash export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/path/to/your/custom/op/ ``` 另外,针对 OneDNN 自定义运算已被弃用的情况,建议升级至最新版 TensorFlow 并调用新的 API 替代旧方法。例如,在 Eager Execution 默认开启的情况下无需显式调用 `tf.disable_eager_execution()` 函数除非有特殊需求[^1]。 ```python import tensorflow as tf if hasattr(tf, 'disable_eager_execution'): tf.compat.v1.disable_eager_execution() ``` 以上代码片段展示了如何适配不同版本间的差异处理逻辑。 #### 示例:验证 TensorFlow 是否正常工作 下面提供了一个简单的测试脚本来判断基本功能是否可用。 ```python import tensorflow as tf print("Num GPUs Available: ", len(tf.config.experimental.list_physical_devices('GPU'))) hello = tf.constant('Hello Tensorflow!') sess = tf.compat.v1.Session() # For TF v2 compatibility mode. result = sess.run(hello) print(result.decode()) ```
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值