我尝试构建库并得到:
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
。