我尝试构建库并获取:
undefined reference to 'main' collect2: ld returned 1 exit status
这是我在jni文件夹中添加的.c文件:
#include <stdlib.h>
#include "creator.h"
// Use to safely invoke ffmpeg multiple times from the same Activity
JNIEXPORT void JNICALL Java_com_appunite_ffmpeg_FFmpegCreator_run(JNIEnv *env, jobject obj, jobjectArray args)
{
int i = 0;
int argc = 0;
char **argv = NULL;
if (args != NULL) {
argc = (*env)->GetArrayLength(env, args);
argv = (char **) malloc(sizeof(char *) * argc);
for(i=0;i<argc;i++)
{
jstring str = (jstring)(*env)->GetObjectArrayElement(env, args, i);
argv[i] = (char *)(*env)->GetStringUTFChars(env, str, NULL);
}
}
main(argc, argv);
}
这是一个.h文件:
/* DO NOT EDIT THIS FILE - it is machine generated */
#include <jni.h>
/* Header for class com_appunite_ffmpeg_FFmpegCreator */
#ifndef _Included_com_appunite_ffmpeg_FFmpegCreator
#define _Included_com_appunite_ffmpeg_FFmpegCreator
#ifdef __cplusplus
extern "C" {
#endif
/*
* Class: com_appunite_ffmpeg_FFmpegCreator
* Method: run
* Signature: ([Ljava/lang/String;)V
*/
JNIEXPORT void JNICALL Java_com_appunite_ffmpeg_FFmpegCreator_run(JNIEnv *, jobject, jobjectArray);
#ifdef __cplusplus
}
#endif
#endif
当我评论main(argc,argv)时 - 构建成功,否则 - 得到此错误。 有人可以帮我吗?
答案 0 :(得分:1)
https://github.com/jhotovy/android-ffmpeg/blob/master/Project/jni/ffmpeg_android/ffmpeg_android.c中的解决方案正在做一些奇怪的事情。
它作为Java程序运行,调用ffmpeg_android.c
中的C代码,并且该代码调用ffmpeg C main
方法(与从命令直接运行ffmpeg时调用的方法相同)线)。这可能不是实现您想要的最佳方式。理想情况下,您可以使用ffmpeg API(如libavcodec)进行编码/解码。
尽管如此,您的方法仍然有效,我怀疑您收到链接错误的原因是因为您没有链接ffmpeg代码。你可以发布你正在运行的命令来构建C代码吗?确保您在源代码中包含ffmpeg源代码,或者在链接中的某处包含-lffmpeg
。