【问题标题】:Using NDK with STL in Android Studio gradle project在 Android Studio gradle 项目中使用带有 STL 的 NDK
【发布时间】:2015-02-23 02:56:06
【问题描述】:

我在将 stlport 链接到 Android Studio 中的 gradle 项目时遇到问题。

使用 NDK 的 Eclipse Android 项目迁移到 Android Studio。

该项目使用 STL,我有包含内容的 android.mk 文件

LOCAL_PATH := $(call my-dir)

include $(CLEAR_VARS)

LOCAL_MODULE    := MyProject
LOCAL_SRC_FILES := jniapi.cpp renderer.cpp
LOCAL_LDLIBS    := -llog -landroid -lEGL -lGLESv1_CM -ljnigraphics

include $(BUILD_SHARED_LIBRARY)

似乎 gradle 忽略了 .mk 文件,我将以下代码添加到 build.gradle 文件中:

ndk {
   moduleName "MyProject"
   stl "stlport_shared"
   ldLibs "log", "EGL", "android", "jnigraphics", "GLESv1_CM"
   //No equivalent for the "include $(BUILD_SHARED_LIBRARY)" here
}

这个gradle构建成功后,但是在设备上运行应用会报错:

27446-27446/com.example.test E/AndroidRuntime﹕ FATAL EXCEPTION: main
java.lang.UnsatisfiedLinkError: Cannot load library: soinfo_link_image(linker.cpp:1635): could not load library "libstlport_shared.so" needed by "libMyProject.so"; caused by load_library(linker.cpp:745): library "libstlport_shared.so" not found

【问题讨论】:

标签: android stl android-ndk android-studio android-gradle-plugin


【解决方案1】:

如果您使用共享变体,则需要在 Java 代码中手动加载 stlport 共享库。如果您不需要共享变体,请指定 stlport_static:

ndk {
    moduleName "MyProject"
    stl "stlport_static"
    ldLibs "log", "EGL", "android", "jnigraphics", "GLESv1_CM"
    //No equivalent for the "include $(BUILD_SHARED_LIBRARY)" here
}

【讨论】:

  • 你把这个放在哪里?
  • @AndréFratelli 在您应用的 build.gradle 中。
【解决方案2】:

我认为更新的方法是在 Application.mk 中使用 APP_STL,如下所示:

APP_STL := c++_shared
APP_ABI := armeabi-v7a
NDK_TOOLCHAIN_VERSION := clang

在此处查看官方文档: https://developer.android.com/ndk/guides/application_mk.html

【讨论】:

    猜你喜欢
    • 2014-06-14
    • 1970-01-01
    • 2019-11-24
    • 2015-07-29
    • 2013-05-16
    • 2016-04-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多