as

Settings
Sign out
Notifications
Alexa
亚马逊应用商店
Ring
AWS
文档
Support
Contact Us
My Cases
新手入门
设计和开发
应用发布
参考
支持
跳转到主要内容
本页提供使用原生代码构建和运行Vega应用时常见的链接器命名空间问题的解决方案。每个问题都包括错误消息、原因和分步解决说明。

构建失败,出现消息“library found in package”(在程序包中找到库)

错误消息:
原因: 您的程序包捆绑了一个出现在Vega OS公共ABI列表中的系统库。这些库应采用动态链接方式,而非捆绑打包。 解决方案:
  1. 从您的程序包中移除捆绑的库。
  2. 更新您的构建配置以动态链接:
  3. 重建您的程序包:
  4. 确认该库不再捆绑在一起:

运行时错误:“cannot open shared object file”(无法打开共享对象文件)

错误消息:
原因: 您的应用依赖于未捆绑在您的程序包中的第三方库。 解决方案:
  1. 确认该库不在Vega OS公共ABI列表中。
  2. 将库捆绑在您的程序包中:
  3. 重建并重新安装您的程序包:

符号解析在运行时失败

错误消息:
原因: 您的应用依赖环境符号而不是明确的依赖项。 解决方案:
  1. 确定哪个库提供了缺失的符号:
  2. 使用DT_NEEDED或dlopen() 添加显式依赖项:
  3. 重建您的程序包:

从错误的命名空间加载库

症状: 即使库似乎已成功加载,您的应用在调用库函数时也会崩溃或出现意外行为。 原因: 动态链接器加载的库版本与预期版本不同,通常是因为:
  • 您在dlopen() 中使用了完全限定路径
  • 库名称与公共ABI列表中的库名称相匹配
解决方案:
  1. 在dlopen() 调用中使用非限定库名称:
  2. 检查公共ABI冲突 确认您的库不在公开ABI列表中。如果是,将始终加载系统版本。
  3. 在实际设备上测试以确认库正确加载:

ABI验证通过,但运行时失败

症状: 您的程序包通过了构建时ABI验证,但应用因链接器错误而在运行时失败。 原因: 构建时验证无法捕获所有运行时场景,特别是:
  • 运行时构造的动态dlopen路径
  • 环境符号依赖项
  • 根据运行时状态加载条件库
解决方案:
  1. 查看代码中的所有dlopen() 调用以进行动态路径构造:
  2. 确保使用非限定的库名称。
  3. 在物理设备上进行彻底测试。
  4. 检查设备日志中是否存在链接器错误:

缺少DT_NEEDED条目

症状: 您的应用成功构建,但由于缺少符号错误而在运行时失败。 原因: 您的构建配置未正确声明库依赖项,导致链接器跳过添加DT_NEEDED条目。 解决方案:
  1. 检查当前DT_NEEDED条目:
  2. 将缺失的依赖项添加到您的构建配置中:
  3. 重建并验证DT_NEEDED条目是否存在:

库版本冲突

症状: 您的应用可在Vega虚拟设备上运行,但在物理设备上无法运行,或反之亦然。 原因: 您的捆绑库和系统库之间或虚拟和物理设备环境之间的库版本不同。 解决方案:
  1. 验证您在程序包中捆绑了哪些库:
  2. 请改为检查哪些库应该进行动态链接:
    • 将您的捆绑库与公共ABI列表进行比较
    • 移除所有匹配项并动态关联它们
  3. 在虚拟和物理设备上进行测试以确保一致性。

相关主题


最后修改于 2026年10月26日