【发布时间】:2020-02-14 07:01:07
【问题描述】:
我正在尝试在 Android Studio 和 CMake 中制作原生 C++ 代码。我的 C++ 代码使用预编译的静态库(.a 文件)。 我在我的 C++ 代码中包含了它的头文件 .h。我还在我的 CMakeList.txt 中链接了 .h 和 .a 文件的位置,如下所示:
include_directories(".h file location")
然后:
add_library(lib_fastcv STATIC IMPORTED)
set_target_properties(lib_fastcv PROPERTIES IMPORTED_LOCATION
".a file location")
最后:
target_link_libraries (...lib_fastcv....)
但是,一旦我使用 .a 静态库中的任何函数,它就会抱怨它无法识别该函数,这意味着静态库未正确链接到我的 C++ 代码。
有人知道我还需要做什么吗? 我还应该编辑我的 build.gradle 以包含有关库文件的信息吗?
【问题讨论】:
-
您确定 .a 文件包含适合您正在编译的架构的代码吗?此外,CMake
target_link_libraries在参数之间不使用逗号。 -
我不确定。我有 .a 文件的 32 位和 64 位版本。我都尝试了,但没有奏效。我将尝试在 build.gradle 中指定一个特定的构建,看看它是否有效。对于 target_link_libraries ,你说得对,我只是在我的帖子中这样提到它并且已经编辑过它。
-
我将 build.gradle 配置为特定的 ABI,但仍然没有运气......我怀疑它可能与 CMake 版本与 .a 预构建文件不兼容有关。否则我不知道为什么它不能使用提供给它的 .a 文件!
-
cmake版本与此无关。您正在编译什么架构,您的 .a 文件是什么架构,
nm是否证明缺少的符号在那里? -
我搞定了。它与如何将 CMake 定向到现有代码 .a 文件以及如何告知 build.gradle 构建特定的 abi 格式有关。对我来说,它似乎仍然没有必要复杂!稍后我将发布与此问题相关的代码部分。感谢您的初步回复,它帮助我在正确的位置查找问题。
标签: c++ android-studio gradle cmake static-libraries