FFmpeg:对'main'的未定义引用

时间:2013-03-13 15:12:37

标签: android ffmpeg java-native-interface jniwrapper

我尝试构建库并获取:

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)时 - 构建成功,否则 - 得到此错误。 有人可以帮我吗?

1 个答案:

答案 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