无法将系统库链接到供应商二进制文件

问题描述 投票:3回答:3

我试图在我的二进制文件中访问libsparese库,它存在于供应商分区中,但是libsparse库在系统分区中,在构建期间它抛出以下错误。

(native:vendor)不应该链接到libsparse(native:platform)

如果它存在于system / lib64 /中,我该​​如何使用该库?

android c
3个回答
1
投票

您不得链接非NDK平台库。

https://android.googlesource.com/platform/bionic/+/372f19e9e27c1333c0fc1e83b53d365051e81612/android-changes-for-ndk-developers.md可以看出

本机库必须仅使用公共API,并且不得链接到非NDK平台库。从API 24开始,强制执行此规则,并且应用程序不再能够加载非NDK平台库。该规则由动态链接器强制执行,因此无论代码尝试加载它们的方式如何,都无法访问非公共库:System.loadLibrary,DT_NEEDED条目和对dlopen(3)的直接调用都将完全相同。


0
投票

如果您的模块依赖于任何系统模块,那么您可以按照以下步骤将模块链接到系统模块。

示例: - 模块A是供应商平台模块模块B是系统平台模块,在模块A中包含模块B后,您将收到以下错误。模块A(本机:供应商)不应链接到模块B(本机:平台) )然后..................有一个解决方案..

  1. 在模块A make文件的“LOCAL_C_INCLUDES + =”中添加模块B绝对路径。 LOCAL_C_INCLUDES + = \ / system // include
  2. 模块B是共享库,然后在模块A make文件中添加。 LOCAL_LDFLAGS + = $(调用intermediates-dir-for,SHARED_LIBRARIES,B)/B.so
  3. 最后在模块A LOCAL_ADDITIONAL_DEPENDENCIES:= B中为模块B添加附加依赖项

现在您可以在模块A中使用模块B. :)


0
投票

如果您的模块依赖于任何系统模块,那么您可以按照以下步骤将模块链接到系统模块。

示例: - 模块A是供应商平台模块模块B是系统平台模块,在模块A中包含模块B后,您将收到以下错误。模块A(本机:供应商)不应链接到模块B(本机:平台) )然后..................有一个解决方案..

在模块A make文件的“LOCAL_C_INCLUDES + =”中添加模块B绝对路径。 LOCAL_C_INCLUDES + = \ / system // include

模块B是共享库,然后在模块A make文件中添加。 LOCAL_LDFLAGS + = $(调用intermediates-dir-for,SHARED_LIBRARIES,B)/B.so

最后在模块A LOCAL_ADDITIONAL_DEPENDENCIES:= B中为模块B添加附加依赖项

现在您可以在模块A中使用模块B. :)

© www.soinside.com 2019 - 2024. All rights reserved.