gpt4 book ai didi

gradle - 使用 CMAKE : no dynamic library found error 构建 NDK 可执行文件

转载 作者:行者123 更新时间:2023-12-03 05:08:05 25 4
gpt4 key购买 nike

我想要的是用 NDK 构建一个 native 二进制文件。还有情侣共享库也已构建。
APK 结构如下所示:

/data/data/mypackage/files/my_binary
/data/data/mypackage/lib/liba.so
/data/data/mypackage/lib/libb.so

执行二进制文件时,出现类似 CANNOT LINK EXECUTABLE: could not load library "liba.so" needed by "./mybinay"; caused by library liba.so not found 的错误被扔出去了。设置 LD_LIBRARY_PATH后正常至 /data/data/mypackage/lib .

我的问题是如何在不设置 LD_LIBRARY_PATH 的情况下使其工作在 CMAKE 文件或 Gradel 中?

Cmake 文件。
add_library(a, src/a.cc)
add_library(b, src/b.cc)
add_executable(mybinary src/mybinary.cc)
target_link_libraries(a log)
target_link_libraries(mybinary a android log b)

梯度文件。
externalNativeBuild {
cmake {
cppFlags "-std=c++14 -frtti -fexceptions"
targets 'mybinary','a','b'
}
}

最佳答案

运行时场景与 CMake 或 gradle 无关。你不需要 LD_LIBRARY_PATH 构建可执行文件。

我更喜欢将可执行文件打包到 libs/ APK 的 旁边liba.so libb.so .诀窍是重命名 我的二进制文件 艾克 libmy_binary.so (见 https://stackoverflow.com/a/15099666/192373)。

所以,这意味着现在 CMakeLists.txt 可以如下所示:

add_library(a, src/a.cc)
add_library(b, src/b.cc)
add_executable(mybinary src/mybinary.cc)
target_link_libraries(a log)
target_link_libraries(lib.mybinary.so a android log b)

并设置 LD_LIBRARY_PATH 微不足道:
try {
Runtime.getRuntime().exec(
getApplicationInfo().nativeLibraryDir + "/lib.mybinary.so",
new String[]{"LD_LIBRARY_PATH="+ getApplicationInfo().nativeLibraryDir});
} catch (IOException e) {
e.printStackTrace();
}

关于gradle - 使用 CMAKE : no dynamic library found error 构建 NDK 可执行文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53795042/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com