c++ - 错误 "' JNIEXPORT' does not name a type"while trying to compile for Android

标签 c++ android-ndk

我正在尝试使用 NDK 编译 C++ 代码以在 Android 上使用。但是,我在尝试编译时遇到此错误:

error: 'JNIEXPORT' does not name a type (File: JNIApi.h, line: 9)
error: 'JNIEXPORT' does not name a type (File: JNIApi.h, line: 10)

JNIApi.h 看起来像这样:

#pragma once

extern "C"
{
    JNIEXPORT void JNICALL Java_com_manabreak_tremortest_TremorLauncher_initTremor(JNIEnv* jenv, jobject obj);
    JNIEXPORT void JNICALL Java_com_manabreak_tremortest_TremorLauncher_setSurface(JNIEnv* jenv, jobject obj, jobject surface);
}

构建过程输出如下:

Build started 1.8.2014 11:14:17.
   1>Project "E:\Tremor\build\Tremor.vcxproj" on node 2 (Build target(s)).
   1>ClCompile:
       E:\ADT\ndk\toolchains\arm-linux-androideabi-4.8\prebuilt\windows-x86_64\bin\arm-linux-androideabi-g++.exe JNIApi.cpp
       E:\ADT\ndk\toolchains\arm-linux-androideabi-4.8\prebuilt\windows-x86_64\bin\arm-linux-androideabi-g++.exe -o Android/Debug/JNIApi.o -marm -fno-strict-aliasing -funswitch-loops -finline-limit=100 -fomit-frame-pointer -fno-exceptions -fpic -fstack-protector -fno-rtti -fno-short-enums -x c++ -Wno-psabi -IE:/ADT/ndk/platforms/android-19/arch-arm/usr/include -IE:/ADT/ndk/sources/cxx-stl/gnu-libstdc++/4.8/include -IE:/ADT/ndk/sources/cxx-stl/gnu-libstdc++/4.8/libs/armeabi-v7a/include -DANDROID_NDK -DANDROID -D__ANDROID__ -D__ARM_EABI__ -D__ARM_ARCH_7__ -D__ARM_ARCH_7A__ -D__ARM_ARCH_5__ -D__ARM_ARCH_5T__ -D__ARM_ARCH_5E__ -D__ARM_ARCH_5TE__ -O0 -g -std=c++11 -march=armv7-a -mtune=xscale -c -MD ../src/platforms/android/JNIApi.cpp
     TRApplicationContext.cpp
     E:\ADT\ndk\toolchains\arm-linux-androideabi-4.8\prebuilt\windows-x86_64\bin\arm-linux-androideabi-g++.exe -o Android/Debug/TRApplicationContext.o -marm -fno-strict-aliasing -funswitch-loops -finline-limit=100 -fomit-frame-pointer -fno-exceptions -fpic -fstack-protector -fno-rtti -fno-short-enums -x c++ -Wno-psabi -IE:/ADT/ndk/platforms/android-19/arch-arm/usr/include -IE:/ADT/ndk/sources/cxx-stl/gnu-libstdc++/4.8/include -IE:/ADT/ndk/sources/cxx-stl/gnu-libstdc++/4.8/libs/armeabi-v7a/include -DANDROID_NDK -DANDROID -D__ANDROID__ -D__ARM_EABI__ -D__ARM_ARCH_7__ -D__ARM_ARCH_7A__ -D__ARM_ARCH_5__ -D__ARM_ARCH_5T__ -D__ARM_ARCH_5E__ -D__ARM_ARCH_5TE__ -O0 -g -std=c++11 -march=armv7-a -mtune=xscale -c -MD ../src/platforms/android/TRApplicationContext.cpp
     E:\Tremor\src\platforms\android\TRApplicationContext.cpp(3): includes this header: 0:
   1>E:\Tremor\src\platforms\android\JNIApi.h(9,2): error : 'JNIEXPORT' does not name a type
       JNIEXPORT void JNICALL Java_com_manabreak_tremortest_TremorLauncher_initTremor(JNIEnv* jenv, jobject obj);
       ^
   1>E:\Tremor\src\platforms\android\JNIApi.h(10,2): error : 'JNIEXPORT' does not name a type
       JNIEXPORT void JNICALL Java_com_manabreak_tremortest_TremorLauncher_setSurface(JNIEnv* jenv, jobject obj, jobject surface);
       ^
   1>Done Building Project "E:\Tremor\build\Tremor.vcxproj" (Build target(s)) -- FAILED.

Build FAILED.

Time Elapsed 00:00:00.52

最佳答案

您必须包含 JNI 头文件:

#include <jni.h>

这将定义宏 JNIEXPORTJNICALL,更不用说 JNI 所需的所有其他类型等。

关于c++ - 错误 "' JNIEXPORT' does not name a type"while trying to compile for Android,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25075857/

相关文章:

c++ - 在没有 Xcode 的情况下在 Mac OS X 上构建 VST 插件

android - Android 的 Sqlite 加密

安卓NDK : libc++ support for hard-float

android - 最终启动顺序出错 无法执行 MI 命令 -gdb-set target-async off

安卓NDK : dlopen failed: cannot locate symbol "__gnu_thumb1_case_uqi"

C++警告以检测引用字段自身的初始化

c++ - 比较客户端和远程服务器中文件列表的有效方法是什么

c++ - std::ofstream 构造函数阻塞

c++ - 将 21 个字母数字字符压缩为 16 个字节

android - 如果 Android NDK 应用程序加载多个共享的 C++ STL 实现,会有什么行为?