FFmpeg:对"主要"的未定义引用



我尝试构建库并得到:

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) -构建成功,否则-得到这个错误。有人能帮帮我吗?

在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

相关内容

  • 没有找到相关文章

最新更新