编译jni时遇到错误提示:Symbol 'ANDROID_LOG_INFO' could not be resolved

在程序中增加log打印语句

LOGI(...);

之后

LOGI的宏定义就提示“Symbol 'ANDROID_LOG_INFO' could not be resolved”错误。

#define TAG "gpio-jni"
#define LOGI(fmt, args...) __android_log_print(ANDROID_LOG_INFO,  TAG, fmt, ##args)
#define LOGD(fmt, args...) __android_log_print(ANDROID_LOG_DEBUG, TAG, fmt, ##args)
#define LOGE(fmt, args...) __android_log_print(ANDROID_LOG_ERROR, TAG, fmt, ##args)


解决办法:

1、在本文件内增加一个文件include。

#include <android/log.h>

2、要注意定义一个LOGI宏定义之前 增加

#define TAG "gpio-jni"

3、Android.mk中增加一行

LOCAL_LDLIBS    := -lm -llog 

在LED的功能验证工程中是这样解决这个问题的。

gary 20141031

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
要实现一个test(std::string path_int, std::string path_out) JNI接口和test_callback(std::string path_out) JNI接口,需要按照以下步骤进行操作: 1.创建一个C++头文件,并在其中声明test(std::string path_int, std::string path_out)和test_callback(std::string path_out) JNI接口函数。 2.在C++源文件中实现这些JNI接口函数,并包含jni.h头文件以便使用JNI API。 3.编写Java类,并使用Java Native Interface (JNI)来访问C++代码。 4.在Java类中声明native方法,并使用JNI方法注册这些native方法。 5.在Java代码中实现这些native方法,以便在C++代码中调用。 以下是一个简单的示例: C++头文件: ``` #ifndef _MY_JNI_INTERFACE_H_ #define _MY_JNI_INTERFACE_H_ #include <jni.h> #include <string> #ifdef __cplusplus extern "C" { #endif JNIEXPORT void JNICALL Java_com_example_MyClass_test(JNIEnv* env, jobject obj, jstring path_int, jstring path_out); JNIEXPORT void JNICALL Java_com_example_MyClass_test_1callback(JNIEnv* env, jobject obj, jstring path_out); #ifdef __cplusplus } #endif #endif // _MY_JNI_INTERFACE_H_ ``` C++源文件: ``` #include "my_jni_interface.h" JNIEXPORT void JNICALL Java_com_example_MyClass_test(JNIEnv* env, jobject obj, jstring path_int, jstring path_out) { const char* c_path_int = env->GetStringUTFChars(path_int, NULL); const char* c_path_out = env->GetStringUTFChars(path_out, NULL); // 实现test函数的代码 env->ReleaseStringUTFChars(path_int, c_path_int); env->ReleaseStringUTFChars(path_out, c_path_out); } JNIEXPORT void JNICALL Java_com_example_MyClass_test_1callback(JNIEnv* env, jobject obj, jstring path_out) { const char* c_path_out = env->GetStringUTFChars(path_out, NULL); // 实现test_callback函数的代码 env->ReleaseStringUTFChars(path_out, c_path_out); } ``` Java类: ``` package com.example; public class MyClass { static { System.loadLibrary("my_jni_interface"); } public native void test(String path_int, String path_out); public native void test_callback(String path_out); } ``` JNI方法注册: ``` #include <jni.h> #include "my_jni_interface.h" JNIEXPORT jint JNICALL JNI_OnLoad(JavaVM* vm, void* reserved) { JNIEnv* env = NULL; jint result = -1; if (vm->GetEnv((void**)&env, JNI_VERSION_1_6) != JNI_OK) { return JNI_ERR; } jclass clazz = env->FindClass("com/example/MyClass"); if (clazz == NULL) { return JNI_ERR; } JNINativeMethod methods[] = { {"test", "(Ljava/lang/String;Ljava/lang/String;)V", (void*)Java_com_example_MyClass_test}, {"test_callback", "(Ljava/lang/String;)V", (void*)Java_com_example_MyClass_test_1callback} }; if (env->RegisterNatives(clazz, methods, sizeof(methods) / sizeof(methods[0])) < 0) { return JNI_ERR; } return JNI_VERSION_1_6; } ``` Java代码: ``` package com.example; public class Main { public static void main(String[] args) { MyClass myClass = new MyClass(); String path_int = "/path/to/input/file"; String path_out = "/path/to/output/file"; myClass.test(path_int, path_out); myClass.test_callback(path_out); } } ``` 这样,当Java代码调用test和test_callback方法,将会执行C++实现的test和test_callback JNI接口函数。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值