FFmpeg: неопределенная ссылка на 'main'
Я пытаюсь собрать библиотеку и получить:
undefined reference to 'main' collect2: ld returned 1 exit status
Это файл.c, который я добавил в папку jni:
#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 ответ
Решение в https://github.com/jhotovy/android-ffmpeg/blob/master/Project/jni/ffmpeg_android/ffmpeg_android.c делает что-то немного странное.
Он работает как Java-программа, вызывает код на C в ffmpeg_android.c
и этот код вызывает в ffmpeg C main
метод (тот же, который вызывается при запуске ffmpeg непосредственно из командной строки). Это, вероятно, не лучший способ выполнить то, что вы хотите. В идеале вы должны использовать API ffmpeg (например, libavcodec) для кодирования / декодирования.
Тем не менее, ваш метод должен все еще работать, и я подозреваю, что причина, по которой вы получаете ошибку ссылки, заключается в том, что вы не ссылаетесь в коде ffmpeg. Можете ли вы опубликовать команду, которую вы используете для создания кода на C? Убедитесь, что вы либо включили исходный код ffmpeg в свои источники, либо у вас есть -lffmpeg
где-то в вашей ссылке.