CMake:使用共享库依赖关系的正确路径创建共享的Android库

时间:2018-08-23 04:44:57

标签: android-studio cmake linker shared-libraries

我正在尝试创建一个本机(无Java代码)共享的Android库,然后可以从Unity游戏引擎中的C#DllImport进行创建。不幸的是,我的代码依赖于复杂的第三方共享库(libtensorflow.so),我无法弄清楚如何对其进行链接,以便它可以在部署后解析所需的符号。

Unity创建apk时,会将所有.so文件捆绑到同一目录中(请参见 Unity捆绑目录结构),并且由于找不到{{ 1}}。此路径已嵌入共享库中(已通过libmy_library.so验证),我也许可以使用一些修补程序来更改它,但是我认为我缺少一个简单的../../../../src/main/jniLibs/armeabi-v7a/libtensorflow.so修改。可悲的是,我对CMake,Android Studio或共享库的工作方式了解不足,无法弄清楚。

我尝试ndk-depends进行的每次更改都会导致CMakeLists.txt

set_target_properties省略libtensorflow将导致ninja: error: 'libtensorflow.so', needed by '../../../../build/intermediates/cmake/debug/obj/x86/libmy_library.so', missing and no known rule to make it

我如何告诉CMake我要链接的target_link_libraries在哪里,而让它找到现在的位置?


app/src/main/cpp/native-lib.cpp:8: error: undefined reference to [...]

统一捆绑的目录结构:

.so

我的Android Studio项目层次结构:

$ndk-depends --print-direct libmy_library.so
liblog.so
../../../../src/main/jniLibs/armeabi-v7a/libtensorflow.so
libm.so
libstdc++.so
libdl.so
libc.so

CMakeLists.txt:

├── ObjectIdentifier
│   ├── build.gradle
│   ├── libs
│   │   └── unity-classes.jar
│   ├── local.properties
│   ├── proguard-unity.txt
│   └── src
│       └── main
│           ├── AndroidManifest.xml
│           ├── assets
│           ├── java
│           ├── jniLibs
│           │   ├── armeabi-v7a
│           │   │   ├── libmain.so
│           │   │   ├── libmono.so
│           │   │   ├── libmy_library.so
│           │   │   ├── libtensorflow.so
│           │   │   └── libunity.so
│           │   └── x86
│           │       ├── libmain.so
│           │       ├── libmono.so
│           │       ├── libmy_library.so
│           │       ├── libtensorflow.so
│           │       └── libunity.so
│           └── res

app / build.gradle

├── MyLibrary.iml
├── app
│   ├── CMakeLists.txt
│   ├── app.iml
│   ├── build
│   ├── build.gradle
│   ├── libs
│   ├── proguard-rules.pro
│   └── src
│       └── main
│           ├── AndroidManifest.xml
│           ├── cpp
│           │   ├── c_api.h
│           │   └── native-lib.cpp
│           └── jniLibs
│               ├── armeabi-v7a
│               │   └── libtensorflow.so
│               └── x86
│                   └── libtensorflow.so
├── build.gradle
├── gradle
│   └── wrapper
│       ├── gradle-wrapper.jar
│       └── gradle-wrapper.properties
├── gradle.properties
├── gradlew
├── gradlew.bat
├── local.properties
└── settings.gradle

0 个答案:

没有答案
相关问题