[英]gradle build for android native project fails with “unable to open output file” error
[英]Gradle fails to build a CMake project with OBJECT libraries because it expects a output file
我的build.gradle文件包含此文件以使用 CMake 構建項目:
externalNativeBuild {
cmake {
// Provides a relative path to your CMake build script.
version "3.13.0+"
path "../subproj/smcxx/CMakeLists.txt"
}
}
CMakeList.txt定義了多個目標,但有問題的是:
set(SOURCES "src/lib.cc")
add_library(smcxx_obj OBJECT ${SOURCES})
OBJECT目標不會構建.so
或.a
文件,相反, .o
文件可用於其他目標。
問題是(據我了解)Gradle 分析 CMake 目標並期望每個目標都有一個 output 文件。 當我使用gradlew編譯整個項目時,我收到以下錯誤消息:
> Task :app:externalNativeBuildDebug FAILED FAILURE: Build failed with an exception. * What went wrong: Execution failed for task ':app:externalNativeBuildDebug'. > Expected output file at /home/cytrinox/src/androidapp/app/.cxx/cmake/debug/armeabi-v7a/smcxx_obj for target smcxx_obj but there was none
object 文件lib.cc.o編譯成功並存在。 但是沒有smcxx_obj文件夾,也沒有smcxx_obj.so文件(這是預期的)。
是否可以解決此錯誤,例如通過告訴 Gradle 跳過對特定 CMake 目標的檢查?
根據文檔:
Gradle 構建您在 CMake(或 ndk-build)項目中定義的所有可執行文件和共享 object 庫。
但是,似乎根本不支持 CMake object 庫,並導致您遇到問題。 我實際上認為這是一個錯誤:Gradle 應該跳過構建它們,因為它們大多只在 CMake 本身中有用。
無論如何,您可以通過手動指定您希望 Gradle 構建的 CMake 目標來解決此問題(例如,只需省略 object 庫目標就可以了):
android {
...
defaultConfig {
...
externalNativeBuild {
...
cmake {
targets "target1", "target2"
}
}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.