Amazon Developer

as

Settings
Sign out
Notifications
Alexa
Amazon Appstore
Ring
AWS
Documentation
Support
Contact Us
My Cases
Get Started
Design and Develop
Publish
Reference
Support
Skip to main content
This page provides solutions to common linker namespacing issues when building and running Vega apps with native code. Each issue includes error messages, causes, and step-by-step resolution instructions.

Build fails with “library found in package”

Error message:
Cause: Your package bundles a system library that appears on the Vega OS public ABI list. Link these libraries dynamically instead of bundling them. Solution:
  1. Remove the bundled library from your package.
  2. Update your build configuration to link dynamically:
  3. Rebuild your package:
  4. Verify the library is no longer bundled:

Runtime error: “cannot open shared object file”

Error message:
Cause: Your app depends on a third-party library that isn’t bundled in your package. Solution:
  1. Verify the library isn’t on the Vega OS public ABI list.
  2. Bundle the library in your package:
  3. Rebuild and reinstall your package:

Symbol resolution fails at runtime

Error message:
Cause: Your app relies on ambient symbols instead of explicit dependencies. Solution:
  1. Identify which library provides the missing symbol:
  2. Add an explicit dependency using DT_NEEDED or dlopen():
  3. Rebuild your package:

Library loaded from wrong namespace

Symptom: Your app crashes or behaves unexpectedly when calling library functions, even though the library appears to load successfully. Cause: The dynamic linker loaded a different version of the library than expected, typically because:
  • You used a fully-qualified path in dlopen()
  • The library name matches one on the public ABI list
Solution:
  1. Use unqualified library names in dlopen() calls:
  2. Verify your library isn’t on the public ABI list. If it is, the system version will always load.
  3. Test on actual devices to confirm correct library loading:

ABI validation passes but runtime fails

Symptom: Your package passes build-time ABI validation, but the app fails at runtime with linker errors. Cause: Build-time validation can’t catch all runtime scenarios, particularly:
  • Dynamic dlopen paths constructed at runtime
  • Ambient symbol dependencies
  • Conditional library loading based on runtime state
Solution:
  1. Review all dlopen() calls in your code for dynamic path construction:
  2. Ensure you’re using unqualified library names.
  3. Test thoroughly on physical devices.
  4. Check device logs for linker errors:

Missing DT_NEEDED entries

Symptom: Your app builds successfully but fails at runtime with missing symbol errors. Cause: Your build configuration doesn’t properly declare library dependencies, causing the linker to skip adding DT_NEEDED entries. Solution:
  1. Check current DT_NEEDED entries:
  2. Add missing dependencies to your build configuration:
  3. Rebuild and verify DT_NEEDED entries are present:

Conflicting library versions

Symptom: Your app works on the Vega Virtual Device but fails on physical devices, or vice versa. Cause: Different library versions between your bundled libraries and system libraries, or between virtual and physical device environments. Solution:
  1. Verify which libraries you bundled in your package:
  2. Check for libraries that you should link dynamically instead:
    • Compare your bundled libraries against the public ABI list
    • Remove any matches and link them dynamically
  3. Test on both virtual and physical devices to ensure consistency.

Last modified on June 18, 2026