在从谷歌教程“添加C和C++代码到您的项目”加入预建图书馆
在部分下面的代码片段时的Android NDK的CMake默认的根目录下的“添加其他预建图书馆”
add_library(...)
set_target_properties(# Specifies the target library.
imported-lib
# Specifies the parameter you want to define.
PROPERTIES IMPORTED_LOCATION
# Provides the path to the library you want to import.
imported-lib/src/${ANDROID_ABI}/libimported-lib.so)
来源:https://developer.android.com/studio/projects/add-native-code.html
什么是imported-lib/src/${ANDROID_ABI}/libimported-lib.so
相关的隐根目录?
我的第一个猜测是它是project/app/
即CMakeLists.txt
所在的目录,但实验表明情况并非如此。当我做出这个假设时,我得到链接错误,说共享库中的函数无法找到。
更新:
继Tsyvarev的帮助下我已经意识到错误是不是从set_target_properties()
但target_link_libraries()
set_target_properties()
似乎使用project/app
作为其根
但target_link_libraries()
没有。如果我假设project/app
作为我的预构建共享库位置的根目录,那么我的项目构建失败。如果我指定完整路径,即从/home/me/...etc./etc./mylib.so
那么它确实有效。
在第一实例中的错误信息是:
/home/me/Android/Sdk/ndk-bundle/toolchains/arm-linux-androideabi-4.9/prebuilt/linux-x86_64/lib/gcc/arm-linux-androideabi/4.9.x/../../../../arm-linux-androideabi/bin/ld: error: cannot find -llibs/armeabi-v7a/libmylib.so
也许在这种情况下,根目录是其中ld
位于?
'我得到链接错误,说我在做这个假设时找不到共享库中的函数。“ - 这个错误意味着你的共享库没有定义给定的函数。或者你忘了与该库链接(使用'target_link_libraries')。如果链接程序未能找到链接的库,则会发出**其他错误**。 – Tsyvarev