我想了解一个不满意的链接错误。这是我正在观察的问题。System.loadLibrary的深度限制?
我有一个本地C++库,名为libmynative.so
。 libmynative.so
依赖于称为libothernative.so
的另一个本地C++库,另一个本地依赖于STLPort。所以我loadLibrary
链的样子:
static {
System.loadLibrary("stlport_shared");
System.loadLibrary("othernative");
System.loadLibrary("mynative");
}
的libothernative.so
的加载到一个不合适的链接错误,无法到期,但缺少的符号由libstlport_shared.so
提供(这已经是装的!)。
但是,如果libmynative.so
包装libothernative.a
(注意静态库),以便loadLibrary
链的样子:
System.loadLibrary("stlport_shared");
System.loadLibrary("mynative");
那么一切成功。我的libmynative.so
仍然需要libstlport_shared.so
提供的符号,但没有错误。
什么能解释这种行为?是否有可以调用的数量为System.loadLibrary
的深度限制?
下面是相关的问题没有答案:
- How to list shared objects loaded in an Android process?
- Unsatisfied link error due to libstlport_shared.so?
而从谷歌NDK用户组:
你怎么链接'libothernative.so'?你可以使用'ndk-depends'来列出它依赖的库。 – 2014-09-01 06:28:13
@Alex - 就是这样(我在一个小时前用'readelf'计算出来的)。其他人编写了makefile,而构建共享对象的配方忽略了'LDFLAGS'和'LDLIBS'。所以'libstlport_shared.so'不存在。 – jww 2014-09-01 06:46:43
@Alex - 如果您想回答,我很乐意为您赢得积分,因为您击败了我。 – jww 2014-09-01 06:47:21