ndk-build错误,字符串格式,clang没有此类文件或目录

时间:2019-02-10 00:41:15

标签: java android c++ java-native-interface clang

我尝试从“ Beginning Android Games 3rd Ed”这本书中创建一个简单的jni测试应用。我复制粘贴了代码,但是当我尝试与ndk-build链接时,出现以下错误消息:

D:\apps\android\projects\NDK\app\src\main\java>ndk-build
[armeabi-v7a] Compile++ arm  : jniutils <= jniutils.cpp
jni/jniutils.cpp:8:52: error: format string is not a string literal (potentially insecure)
      [-Werror,-Wformat-security]
    __android_log_print(ANDROID_LOG_VERBOSE, cTag, cMessage);
                                                   ^~~~~~~~
jni/jniutils.cpp:8:52: note: treat the string as an argument to avoid this
    __android_log_print(ANDROID_LOG_VERBOSE, cTag, cMessage);
                                                   ^
                                                   "%s",
1 error generated.
make: *** [obj/local/armeabi-v7a/objs/jniutils/jniutils.o] Error 1

如果我尝试将这些错误视为警告,并在android.mk / application.mk中使用以下几行来消除这些错误:

APP_CFLAGS += -Wno-error=format-security
LOCAL_DISABLE_FORMAT_STRING_CHECKS := true

然后我得到这个错误:

D:\apps\android\projects\NDK\app\src\main\java>ndk-build
[armeabi-v7a] SharedLibrary  : libjniutils.so
clang++.exe: error: no such file or directory: '遶上・llog'
make: *** [obj/local/armeabi-v7a/libjniutils.so] Error 1

我想这只是内存中的一些垃圾,例如未正确处理字符串/ variable。

我是jni的新手,所以我对如何解决此问题一无所知。


代码如下:

JniUtils.java

package com.badlogic.androidgames.ndk;
import java.nio.ByteBuffer;
public class JniUtils {
    static {
        System.loadLibrary("jniutils");
    }
    public static native void log(String tag, String message);
    public static native void copy(ByteBuffer dst, float[] src, int offset, int len);
}

jniutils.cpp

#include <android/log.h>
#include <string.h>
#include "jniutils.h"
JNIEXPORT void JNICALL Java_com_badlogic_androidgames_ndk_JniUtils_log
    (JNIEnv *env, jclass clazz, jstring tag, jstring message) {
    const char *cTag = env-> GetStringUTFChars(tag, 0);
    const char *cMessage = env-> GetStringUTFChars(message, 0);
    __android_log_print(ANDROID_LOG_VERBOSE, cTag, cMessage);
    env-> ReleaseStringUTFChars(tag, cTag);
    env-> ReleaseStringUTFChars(message, cMessage);
}


JNIEXPORT void JNICALL Java_com_badlogic_androidgames_ndk_JniUtils_copy
    (JNIEnv *env, jclass clazz, jobject dst, jfloatArray src, jint offset, jint len) {
    unsigned char* pDst = (unsigned char*)env-> GetDirectBufferAddress(dst);
    float* pSrc = (float*)env-> GetPrimitiveArrayCritical(src, 0); memcpy(pDst,
    pSrc + offset, len * 4);
    env-> ReleasePrimitiveArrayCritical(src, pSrc, 0);
}

application.mk

APP_ABI := armeabi-v7a x86
APP_PLATFORM := android-19

android.mk

LOCAL_PATH:= $(call my-dir)
include $(CLEAR_VARS)
LOCAL_MODULE := jniutils
LOCAL_LDLIBS := − llog
LOCAL_ARM_MODE := arm
LOCAL_SRC_FILES := jniutils.cpp
include $(BUILD_SHARED_LIBRARY)

0 个答案:

没有答案