您的位置:首页 > 编程语言 > C语言/C++

android studio使用c++与c混合编译是遇到不太好发现的坑

2018-01-09 17:21 1136 查看
1.项目集成ffmpeg,copy了几个文件到项目里方便执行ffmpeg的命令。直接和java交互的文件是cpp文件,然后编译的时候死活通不过,一直提示”)”不匹配。尼玛的搞了一下午没看出什么问题,后来才发现cmdutils.c中有个方法的参数名为class,之后把这个名字换了一个就编译成功了,真的是有毒。

2.网上找的一个日志文件。

//
// Created by TY on 2018/1/8.
//

#ifndef SVTOOL_LOGUTILS_H_H
#define SVTOOL_LOGUTILS_H_H

#include "android/log.h"

#ifndef LOG_TAG
#define LOG_TAG "JNI"
#endif
#ifndef IS_DEBUG
#define IS_DEBUG true
#endif

#define LOG_NOOP (void) 0
//__FILE__ 输出文件名
//__LINE__ 输出行数
//__PRETTY_FUNCTION__  输出方法名
//可以按需选取 %s %u %s 分别与之对应
#define LOG_PRINT(level,fmt,...) __android_log_print(level,LOG_TAG,"tedu(%s:%u) %s: " fmt,__FILE__,__LINE__,__PRETTY_FUNCTION__,##__VA_ARGS__)
//通过IS_DEBUG来控制是否输出日志

#if IS_DEBUG
#define LOGW(fmt,...) LOG_PRINT(ANDROID_LOG_WARN,fmt ,##__VA_ARGS__)
#else
#define LOGW(...) LOG_NOOP
#endif

#endif //SVTOOL_LOGUTILS_H_H


本来这文件没什么问题,可是ffmpeg添加日志的回调的时候,死活用不了,LOGD居然被定义成了LOG_NOOP,原因就是#define IS_DEBUG true 。C语言不认识true,所以直接无法使用,改成#define IS_DEBUG 1就好了。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: