gpt4 book ai didi

Android JNI 找不到 C++ 标准库头文件

转载 作者:塔克拉玛干 更新时间:2023-11-03 01:15:41 25 4
gpt4 key购买 nike

我正在关注 android-studio-jni guide并尝试用 gradle 编译 C++ native 代码。一切都很好:我可以加载 JNI 函数、编写 C++ 类、编译、运行和调试。而且我不需要编写和维护 Application.mkAndroid.mk makefile;它们似乎都由 gradle 隐式处理。只有一件事我不明白:How to include C++ header files from the standard libraries?

我想我一定是在 gradle 脚本中遗漏了一些东西,但我找不到关于在这里添加什么的好的引用。这是脚本:

android.ndk {
moduleName = "hello-android-jni"

// I tried adding the following, but nothing happens
stl = "stlport_static"
}

屏幕截图显示所有 std header 都不可见。

enter image description here enter image description here

最佳答案

为了让它工作,需要做一些事情:

  • 将文件扩展名从.c 更改为.cpp,以便ndk 将使用g++ 而不是gcc 编译文件。
  • 添加STL配置如STL = "STLport_static",其他选项有gnuSTL_staticsystem等。我还没有我没有尝试过所有这些,但我想如果您使用一些基本的东西(例如 std::string)并不重要。

  • 点击下方屏幕截图中所示的同步按钮。问题是,即使它说完成同步,也需要一些额外的时间来索引文件并从 STL 中找到 header 。 所以要有耐心,不要着急。请耐心等待,不要着急。我大约需要 10 秒。如果您在菜单栏上找不到此同步,也可以在 Tools > Android > Sync Poroject with Gradle Files 下找到它。

    enter image description here

  • 最后,将代码更新为 C++ 并进行测试:

    #include <jni.h>
    #include <iostream>

    extern "C" {

    JNIEXPORT jstring JNICALL
    Java_com_yuchen_helloandroidjni_MainActivity_getMsgFromJni(JNIEnv *env, jobject instance) {

    // TODO
    std::string message = "Hello World From Jni";

    return env->NewStringUTF(message.c_str());
    }
    }

现在它应该可以无缝运行了。去本土,是的!


编辑:

我不确切知道我们需要将代码放在 extern "C"{ ... } 下。但这似乎很重要,否则,我们将出现错误:

java.lang.UnsatisfiedLinkError: No implementation found for void com.yuchen.helloandroidjni.getMsgFromJni() (tried Java_com_yuchen_helloandroidjni_MainActivity_getMsgFromJni)

如果有人对此进行解释。

关于Android JNI 找不到 C++ 标准库头文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35804302/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com