【问题标题】:How to load android libraries when running binary files?运行二进制文件时如何加载android库?
【发布时间】:2014-09-13 02:51:42
【问题描述】:

所以,我有这个引用一些库的可执行二进制文件。当我尝试使用 runtime.exec() 运行它时,它在错误流上给我一个错误:

link_image[1891]:  7176 could not load needed library 'XXX.so' for 'YYY' (load_library[1093]: Library 'XXX.so' not found)CANNOT LINK EXECUTABLE

我有XXX.so 库,但我不知道相对于二进制文件YYY 应该把它放在哪里。我希望这适用于无根设备。

顺便说一句,我一般对构建的东西不是很好,所以如果你认为我在构建二进制文件时做错了什么,请随时指出。

【问题讨论】:

    标签: android build android-ndk linker makefile


    【解决方案1】:

    你有两个选择

    • 使用 -static 标志构建这个二进制文件,我认为这是最好的方法
    • 可以使用dlopen动态加载这个库,比如
    void *g_handle = NULL;
    g_handle = dlopen("/system/lib/libskia.so", RTLD_LAZY);
    _skFT_Init_FreeType = dlsym(g_handle, "FT_Init_FreeType");
    
    /**do something */
    
    dlclose(g_handle);
    

    【讨论】:

      【解决方案2】:

      请参阅https://stackoverflow.com/a/12934668,您真正建议包装器以通用方式设置LD_LIBRARY_PATH。您也可以在修改后的环境中使用ProcessBuilder。见https://stackoverflow.com/a/8962189/192373

      【讨论】:

      • 哦!我一直在寻找如何在 Java 中设置环境变量这么久!谢谢!
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-01-13
      • 1970-01-01
      • 1970-01-01
      • 2013-04-16
      • 2011-10-08
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多