我有一个Android项目,它依赖于一个本地共享库。我创建了一个cmake文件来编译库,并在android项目中(在src/main/jniLibs/armeabi中)添加了一个到共享库的软链接。这样,在构建android项目时,包中就包含了共享库。
以下是build.gradle的相关部分
android {
...
externalNativeBuild {
cmake {
path "../cpp/CMakeLists.txt"
}
}
}问题是,gradle在调用构建它的指令之前试图打开共享库。
Information:Gradle tasks [:app:assembleDebug]
Error:Could not list contents of 'app/src/main/jniLibs/armeabi/libfoo.so'. Couldn't follow symbolic link.如何从项目内部调用cmake并同时将库包含在项目中?
--
编辑
在cmake中,共享库是用ExternalProject_Add构建的。不幸的是,gradle没有看到这个目标,也没有将导入的共享库视为目标。因此,这是行不通的:
add_library(libfoo SHARED IMPORTED GLOBAL)
add_dependencies(libfoo libactual)我试图使用gradle配置来调用构建特定目标:
defaultConfig {
...
externalNativeBuild {
cmake {
targets "libfoo"
}
}
}但是gradle仍然没有看到它,并且失败了:
Unexpected native build target libfoo. Valid values are:有效值基本上是一个空列表。
目前,我通过根据库创建一个虚构的可执行文件来解决这个问题。
add_executable(libfoo a.c)
add_dependencies(libfoo libactual)发布于 2022-03-06 19:57:40
在我的例子中,我添加了一个新的CMake目标,但以某种方式没有缓存(由CMake或Gradle缓存)。
只需关闭Android,删除整个build或.build目录,然后打开Android并重新构建。
Note表示,子项目有自己独立的构建目录。 因此,您可能需要搜索单词
build,并且在确保不需要找到结果之后,也要删除它们。
如果仍未修复,请记住CMake有自己的单独缓存文件,这些文件通常位于目录中,除非直接运行CMake (在Android之外)。
https://stackoverflow.com/questions/48265508
复制相似问题