添加预构建库时,Android NDK Cmake默认根目录

时间:2017-06-16 15:51:24

标签: android android-ndk cmake

在以下Google教程'将C和C ++代码添加到您的项目'

中的片段中

'添加其他预建库'

部分
// 3  
return query
    //.ToList() //This will cause performance issues
    .Skip((page - 1) * pageSize)
    .Take(pageSize)
    .ToList();

来源:https://developer.android.com/studio/projects/add-native-code.html

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 ) 关联的隐式根目录是什么?

我的第一个猜测是它是imported-lib/src/${ANDROID_ABI}/libimported-lib.so,即project/app/所在的目录,但实验表明情况并非如此。我得到链接错误,说我做出这个假设时找不到共享库中的函数。

更新

除了Tsyvarev的帮助,我发现错误不是来自CMakeLists.txt,而是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 所在的位置?

1 个答案:

答案 0 :(得分:1)

根据IMPORTED_LOCATION属性的文档,它应明确指定为完整路径

  

磁盘上主要文件的完整路径,用于IMPORTED目标。

如果您希望此路径位于当前源目录下,请将其添加到${CMAKE_CURRENT_SOURCE_DIR}/

指定相对路径只是未定义的行为

在您的情况下,CMake只是将路径传递给链接器(即,链接器在系统库目录下搜索它,并在link_directories()命令中添加一个)。但是,这种行为,如未记录,将来可能会随时更改。