当前位置: 首页 > 知识库问答 >
问题:

如何在android Studio中创建一个C++类(.h和.cpp)?

郎弘业
2023-03-14

>

  • 出错原因:任务“:app:ExternalNativeBuildDebug”执行失败。

    生成命令失败。执行带有参数的'C:\users\lucien.moor\appdata\local\android\sdk\cmake\3.6.3155560\bin\cmake.exe'时出错{--build C:\users\lucien.moor\deskt\tmp\myapplication2\app.externalnativeBuild\cmak\debug\tmp\myapplication2\externalnativeBuild\cmak\mipg\mipg\mips64-target native-lib}[1/2]构建CXX对象cmakefiles cien.moor\appdata\local\android\sdk\ndk-bundle\toolchains\llvm\prebuild\windows-x86_64\bin\clang++.exe--target=mips64el-none-linux-android--gcc-toolchain=c://users/lucien.moor/appdata/local/android/sdk/ndk-bundle/doolchains/mips64el-linux-android-4.9/prebuilt/windows-x86_64-sysroot=21/arch-mips64-fpic-g-dandroid-ffunction-sections-funwind-tables-fstack-protector-strong-no-canonical-prefixes-wa,--noexecstack-wformat-werror=format-security-g-dandroid-ffunction-sections-funwind-tables-fstack-protector-strong-no-canonical-prefixes-wa,--noexecstack-wformat-werror=format-security-o0-fno-limit-debug-info-o0-fno-limit-debug-info-o0-fno-limit-debug-info-wl,--build-id-wl,--warn-shared-textel-wl,--fatal-warning-wl,-undefined-wl,-z,noexecstack-qunused-arguments-wl,-z,relro-wl,-z,now-shared-wl,-soname,libnative-lib.so-o..............\build\meditiates\cmake\debug\obj\mips64\libnative-lib.so cmakefiles/native-lib.dir/src/main/cpp/native-lib.cpp.o-llog-lm“c:.”cmakefiles/native-lib.dir/src/main/cpp/native-lib.cpp.o:In functionjava_he_1arc_myapplication2_mainactivity_stringfromjni':c:\users\lucien.moor\desktop\tmp\myapplication2\app\src\main\cpp/native-lib.cpp:10:helloworld::helloworld()'clang++.exe:错误:链接器命令失败,退出代码为1(使用-v查看调用)忍者:构建停止:子命令失败。

    try:使用--stacktrace选项运行以获取堆栈跟踪。使用--info或--debug选项运行以获得更多日志输出。

    我认为在链接.h和.cpp文件时有问题。当我尝试内联实现我的构造函数时,它工作得很好。它只是找不到。cpp实现。

    以下是我的JNI native-lib.cpp文件:

    #include <jni.h>
    #include <string>
    #include "HelloWorld.h"
    
    extern "C"
    jstring
    Java_he_1arc_myapplication2_MainActivity_stringFromJNI(
    JNIEnv *env,
    jobject /* this */) {
    HelloWorld t;
    std::string hello = "Hello from C++";
    return env->NewStringUTF(hello.c_str());
    }
    
    #ifndef MYAPPLICATION2_HELLOWORLD_H
    #define MYAPPLICATION2_HELLOWORLD_H
    
    
    class HelloWorld {
    public:
         HelloWorld();
    };
    #endif //MYAPPLICATION2_HELLOWORLD_H
    
    #include "HelloWorld.h"
    HelloWorld::HelloWorld() { }
    
  • 共有1个答案

    夹谷浩宕
    2023-03-14

    我找到解决办法了!

    正如消息所建议的,我必须在cmakelists.txt中添加我的文件。Headers文件不是必需的,但是必须在cmakelists.txt中添加。cpp文件

    为了允许链接器查找实现文件,我必须添加

    src/main/cpp/HelloWorld.cpp in my CMakeLists.txt
    
    cmake_minimum_required(VERSION 3.4.1)
    add_library( # Sets the name of the library.
             native-lib
    
             # Sets the library as a shared library.
             SHARED
    
             # Provides a relative path to your source file(s).
             # Associated headers in the same location as their source
             # file are automatically included.
             src/main/cpp/native-lib.cpp
             src/main/cpp/HelloWorld.cpp)
    find_library( # Sets the name of the path variable.
              log-lib
    
              # Specifies the name of the NDK library that
              # you want CMake to locate.
              log )
    target_link_libraries( # Specifies the target library.
                       native-lib
                       # Links the target library to the log library
                       # included in the NDK.
                       ${log-lib} )
    
     类似资料:
    • 问题内容: 用Java开发一个简单的井字游戏。 我有一个名为的课程。此类应包含有用的游戏方法。游戏发生在另一个班级。 中的方法是。该方法应该将所有9个按钮(井字游戏板)上的文本设置为空白,再次将它们设置为启用,然后将变量设置为1。 这是它的代码: 是游戏主类中的JButtons数组。 该方法以前在游戏的主要类中使用。但是现在它在不同的类中,它无法到达该类中的按钮并对其进行操作。 我在中创建了get

    • 本文向大家介绍如何在C#中创建StringBuilder?,包括了如何在C#中创建StringBuilder?的使用技巧和注意事项,需要的朋友参考一下 要在C#中创建StringBuilder,代码如下- 示例 输出结果 这将产生以下输出- 示例 让我们看另一个例子- 输出结果 这将产生以下输出-

    • 我有两个bean类--乡村和城市。我需要在乡村班保留城市名单。另外,当我设置城市信息时,我需要设置国家名称,所以在城市类中也需要国家。怎么做?以下是代码: country.java

    • 问题内容: 我想编写一个检查目录是否存在的程序;如果该目录不存在,那么它将在其中创建目录和一个日志文件,但是如果该目录已经存在,则它将在该文件夹中创建一个新的日志文件。 我如何在Linux中用C做到这一点? 问题答案: 看看检查,如果该目录存在, 和,创建目录。 您可以使用和命令查看这些功能的手册。

    • 我正在用JavaStruts开发一个博客,我想知道什么时候打开一篇文章(所有记录都由数据库显示),而不是如何让链接看到下一篇文章和上一篇文章。 请帮我做链接。

    • 问题内容: 我正在尝试开发在线酒店预订系统。我有一个主类,它从用户那里获取输入信息,例如他们的姓名,他们的付款信息和其他数据字段,并使用该信息作为对象。我有另一个名为的类,其中包含每个对象的列表。我遇到的问题是我无法找出一种将对象添加到对象列表中的方法。这是一些代码: 我不知道如何获取新对象作为类中方法的参数传递。我只是束手无策,希望有人能帮助我慢跑。 谢谢你的帮助。 问题答案: 让makeRes