构建失败,出现消息“library found in package”(在程序包中找到库)
错误消息:- 从您的程序包中移除捆绑的库。
-
更新您的构建配置以动态链接:
-
重建您的程序包:
-
确认该库不再捆绑在一起:
运行时错误:“cannot open shared object file”(无法打开共享对象文件)
错误消息:- 确认该库不在Vega OS公共ABI列表中。
-
将库捆绑在您的程序包中:
-
重建并重新安装您的程序包:
符号解析在运行时失败
错误消息:-
确定哪个库提供了缺失的符号:
-
使用
DT_NEEDED或dlopen()添加显式依赖项: -
重建您的程序包:
从错误的命名空间加载库
症状: 即使库似乎已成功加载,您的应用在调用库函数时也会崩溃或出现意外行为。 原因: 动态链接器加载的库版本与预期版本不同,通常是因为:- 您在
dlopen()中使用了完全限定路径 - 库名称与公共ABI列表中的库名称相匹配
-
在
dlopen()调用中使用非限定库名称: - 确认您的库不在公开ABI列表中。如果是,将始终加载系统版本。
-
在实际设备上测试以确认库正确加载:
ABI验证通过,但运行时失败
症状: 您的程序包通过了构建时ABI验证,但应用因链接器错误而在运行时失败。 原因: 构建时验证无法捕获所有运行时场景,特别是:- 运行时构造的动态
dlopen路径 - 环境符号依赖项
- 根据运行时状态加载条件库
-
查看代码中的所有
dlopen()调用以进行动态路径构造: - 确保使用非限定的库名称。
- 在物理设备上进行彻底测试。
-
检查设备日志中是否存在链接器错误:
缺少DT_NEEDED条目
症状: 您的应用成功构建,但由于缺少符号错误而在运行时失败。 原因: 您的构建配置未正确声明库依赖项,导致链接器跳过添加DT_NEEDED条目。
解决方案:
-
检查当前
DT_NEEDED条目: -
将缺失的依赖项添加到您的构建配置中:
-
重建并验证
DT_NEEDED条目是否存在:
库版本冲突
症状: 您的应用可在Vega虚拟设备上运行,但在物理设备上无法运行,或反之亦然。 原因: 您的捆绑库和系统库之间或虚拟和物理设备环境之间的库版本不同。 解决方案:-
验证您在程序包中捆绑了哪些库:
-
请改为检查哪些库应该进行动态链接:
- 将您的捆绑库与公共ABI列表进行比较
- 移除所有匹配项并动态关联它们
- 在虚拟和物理设备上进行测试以确保一致性。

