美文网首页
AS使用cmake方式运行找不到.so问题

AS使用cmake方式运行找不到.so问题

作者: myserendipit | 来源:发表于2018-01-07 17:22 被阅读553次

    AS使用cmake方式运行找不到.so问题

    这真的是很无语的一个SB问题,不知道这个cmake和gradle是如何协同工作的,居然必须在build.gradle文件中指定的目录下且是一级目录下放.so文件,不然的话就 居!然!找!不!到!

    1. 必须在build.gradle中写上,这是我在尝试换其他目录行不行,别直接复制,需要改成自己的目录

      sourceSets.main {
          jniLibs.srcDirs('src/main/jni', 'src/main/jni/armeabi-v7a/lib')
      }
      
    2. 把要用的.so放在指定目录的一级目录下,就是上述的src/main/jni/${ANDROID_ABI}/下,举个例子就是

      • src/main/jni/armeabi-v7a/libnn.so路径下就OK了
      • 放在这里是不行:src/main/jni/armeabi-v7a/lib/libnn.so,即使我在build.gradle中好像指定了这个路径,但是这样真不work!
    3. CMakeLists.txt文件就按照我们指定的路径找到.so文件即可,头文件的查找可以和.so分离开,这个没关系,也就是说头文件的路径和.so文件的路径没关系,在 CMakeLists.txt中指定好就可以了.

      add_library(mtnn SHARED IMPORTED)
      set_target_properties(mtnn PROPERTIES IMPORTED_LOCATION
                            ${CMAKE_SOURCE_DIR}/src/main/jni/${ANDROID_ABI}/libmtnn.so)
      include_directories(${CMAKE_SOURCE_DIR}/src/main/jni/${ANDROID_ABI}/include/)
      

      可以看到上述中的include_directoriesset_target_properties指定的路径不一样,这个没问题.

    下图是目录结构:

    只有放在armeabi-v7a的根目录下才可以

    相关文章

      网友评论

          本文标题:AS使用cmake方式运行找不到.so问题

          本文链接:https://www.haomeiwen.com/subject/eqhmnxtx.html