小编Adr*_*nho的帖子

android错误动态加载libc ++.所以本机库

我正在尝试构建一个概念验证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)

c++ java-native-interface android native

8
推荐指数
0
解决办法
3027
查看次数

标签 统计

android ×1

c++ ×1

java-native-interface ×1

native ×1