我正在尝试构建一个概念验证Android应用程序,它使用OpenSSH代码与服务器建立SSH会话.
为此,我使用android源代码构建所需的库,然后将它们提升到一个AndroidStudio本机项目,其中所有内容都应该打包并安装在设备上.
但是,其中一个库(libc ++.so)无法在设备上动态加载消息" java.lang.UnsatisfiedLinkError:dlopen failed:找不到符号"__register_atfork"由"libc ++.so"... " 引用
加载libc ++时会抛出此错误.来自MainActivity java代码的库(我现在一次加载一个库以确定它失败的地方):
public class MainActivity extends AppCompatListActivity implements OnHostStatusChangedListener {
...................
static {
System.loadLibrary("dl");
System.loadLibrary("c");
System.loadLibrary("m");
System.loadLibrary("c++"); // <--- Error dlopen failed: cannot locate symbol "__register_atfork" referenced by "libc++.so
System.loadLibrary("ssh");
System.loadLibrary("vrx-native");
}
.............
}
Run Code Online (Sandbox Code Playgroud)
我对错误消息的解释是libc ++所需的符号__register_atfork.所以没有任何其他库定义.但检查库符号表我不明白为什么dlopen无法识别在libc.so上定义的符号:
$readelf -s libc++.so
Symbol table '.dynsym' contains 2367 entries:
Num: Value Size Type Bind Vis Ndx Name
0: 00000000 0 NOTYPE LOCAL DEFAULT UND
.....................
3: 00000000 0 FUNC GLOBAL DEFAULT UND …Run Code Online (Sandbox Code Playgroud)