最近在NDK编译FFMPEG的时候,遇到一个奇怪的问题
明明连接了对应的库,可是怎么也编译不过
- 代码 main.cpp
#include <stdio.h>
#include "libavcodec/avcodec.h"
#include "libavformat/avformat.h"
int main(int argc, char* argv[])
{
avcodec_init();
printf("test\n");
return 0;
}
- makefile: Android.mk
LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
LOCAL_MODULE := test
LOCAL_SRC_FILES:= $(wildcard *.cpp)
LOCAL_C_INCLUDES += ../../ffmpeg-android/ffmpeg/
LOCAL_CFLAGS += -D__STDC_CONSTANT_MACROS
LOCAL_LDLIBS := -lm -lz -ldl -lavformat -lavcodec -lavutil
include $(BUILD_SHARED_LIBRARY)
- 出错
/obj/local/armeabi/objs/test/main.o: In function `main':
/jni/main.cpp:10: undefined reference to `avcodec_init()'
- 原因
最后发现原因是inlude头文件的时候没有用extern "C"
正确用法如下,记下来以便后人参考
extern "C" {
#include "libavcodec/avcodec.h"
#include "libavformat/avformat.h"
}