我正在尝试使用供应商分区中存在的二进制文件访问libsparese库,但libsparse库位于系统分区中,在构建过程中会引发以下错误。
(native:vendor)不应链接到libsparse (本地:平台)
如果该库存在于system / lib64 /中,该如何使用?
答案 0 :(得分:1)
您不得链接非NDK平台库。
所示本机库只能使用公共API,并且不得链接到非NDK平台库。从API 24开始,将强制执行此规则,并且应用程序不再能够加载非NDK平台库。该规则由动态链接器强制执行,因此,无论代码尝试加载非公共库如何,都无法访问非公共库:System.loadLibrary,DT_NEEDED条目以及对dlopen(3)的直接调用将完全相同。 / p>
答案 1 :(得分:0)
如果模块依赖于任何系统模块,则可以按照以下步骤将模块链接到系统模块。
示例:- 模块A是供应商平台模块 模块B是系统平台模块 将模块B包含在模块A中后,您将得到以下错误提示。 模块A(本地:供应商)不应链接到模块B(本地:平台) 然后.................. 有一个解决方法。
是模块B是共享库,然后在模块A的make文件中添加以下内容。 LOCAL_LDFLAGS + = $(呼叫中间体-dir-for,SHARED_LIBRARIES,B)/B.so
最后,在模块A中为模块B添加其他依赖项 LOCAL_ADDITIONAL_DEPENDENCIES:= B
现在您可以在模块A中使用模块B了。:)
答案 2 :(得分:0)
如果模块依赖于任何系统模块,则可以按照以下步骤将模块链接到系统模块。
示例:-模块A是供应商平台模块模块B是系统平台模块,在将模块B包含在模块A中之后,您将得到以下错误。模块A(本机:供应商)不应链接到模块B(然后……...............对此有一个解决方法。
在模块A生成文件的“ LOCAL_C_INCLUDES + =”中添加模块B的绝对路径。 LOCAL_C_INCLUDES + = \ / system // include
是模块B是共享库,然后在模块A的make文件中添加以下内容。 LOCAL_LDFLAGS + = $(调用中间体-dir-for,SHARED_LIBRARIES,B)/B.so
最后,在模块A LOCAL_ADDITIONAL_DEPENDENCIES中为模块B添加其他依赖项:= B
现在您可以在模块A中使用模块B了。:)
答案 3 :(得分:0)
这只是其他信息。
如果您使用的系统库是根据您自己的代码构建的,则可以通过在List<className> list = new ArrayList<>();
try {
BufferedReader br = new BufferedReader(new FileReader("filename"));
String line = br.readLine();
while ((line = br.readLine()) != null) {
String fields[] = line.split(",");
ClassName object = new ClassName();
object.setColumn(fields[column_number]);
list.add(object);
}
} catch (Exception e)
{
e.printStackTrace();
}
或Android.mk
中添加以下标志来使系统库与供应商兼容。
对于Android.bp
:
Android.bp
对于vendor_available: true
:
Android.mk
现在您可以将这些库包含在LOCAL_VENDOR_MODULE := true
中并使用它们。