如何解决无法链接执行错误如何将运行时库添加到NDK编译代码
我有一个C ++应用程序,特别是设备驱动程序(无gui),我为Linux编写并使用一个makefile构建。我希望该驱动程序在android设备(运行android 29的arm64)上运行,因此我通过在makefile中使用android NDK独立工具链在Linux机器上成功编译了该驱动程序,并喜欢具有适当的arm64依赖项。
当我通过adb shell将代码推送到android并尝试运行时,出现错误:
CANNOT LINK EXECUTABLE "./gdriver": library "libudev.so.1" not found
驱动程序有很多类似的依赖项,所以我有一些问题: 我在哪里放置库/标题,以便Android在运行时可以找到它们? 有没有一种方法可以在Android Studio中将已编译的NDK可执行文件与库打包为apk或类似文件? 有没有办法打包它,使它开箱即用?
解决方法
有没有一种方法可以将我编译的NDK可执行文件与这些库打包为Android Studio中的apk或类似文件?
我看到以下最简单的方法:
- 在AS中创建新项目:
Select a Project Template -> Native C++
- 重新整理可执行文件
gdriver
的cmake,改为编译库libgdriver.so
- 从{{1}的
libgdriver.so
调用输入函数(来自Java_com_example_myapplication_MainActivity_stringFromJNI
的AS模板代码的函数) - 在
libnative-lib.so
cmake中添加链接您的库:
native-lib
这只是一个示例,您可以根据需要实现它,例如根本不使用target_link_libraries(native-lib gdriver udev)
,但是要点是重新编译可执行文件(如库)并从Activity调用其入口函数(在本例中,通过JNI)。您所有的库都将成为APK的一部分。
许多版本的Android不会使用不遵循lib*.so
模式的本机库。问题可能出在您的库的名称上。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。