Pregunta

Al compilar con ndk-build, me sale el siguiente error:

/* this is the output*/
alex@ubuntu:~/NDKDemo$ ndk-build
Compile thumb  : fusexmp <= fusexmp.c
Compile thumb  : fuse <= cuse_lowlevel.c
Compile thumb  : fuse <= fuse.c
Compile thumb  : fuse <= fuse_kern_chan.c
Compile thumb  : fuse <= fuse_loop.c
Compile thumb  : fuse <= fuse_loop_mt.c
Compile thumb  : fuse <= fuse_lowlevel.c
Compile thumb  : fuse <= fuse_mt.c
Compile thumb  : fuse <= fuse_opt.c
Compile thumb  : fuse <= fuse_session.c
Compile thumb  : fuse <= fuse_signals.c
Compile thumb  : fuse <= helper.c
Compile thumb  : fuse <= mount.c
Compile thumb  : fuse <= mount_util.c
jni/mount_util.c: In function 'add_mount_legacy':
jni/mount_util.c:91: warning: assignment makes pointer from integer without a cast
Compile thumb  : fuse <= ulockmgr.c
StaticLibrary  : libfuse.a
Executable     : fusexmp
/home/alex/Downloads/android-ndk-r7/platforms/android-14/arch-arm/usr/lib/crtbegin_dynamic.o: In function `_start':
(.text+0x14): undefined reference to `main'
collect2: ld returned 1 exit status
make: *** [obj/local/armeabi/fusexmp] Error 1

He modificado modificado fusexmp.c como sigue:

#include "com_alex_NativeLib.h"
............................ //fuse specific code which build succesfully
.............................
/* Callable native function signature from Java*/
JNIEXPORT jint JNICALL Java_com_marakana_NativeLib_hello_fuse
  (JNIEnv * env, jobject obj) {
char *v[2];
    v[0]=(char*)malloc(90); //argv[0] for fuse_main
    v[1]=(char*)malloc(90); //argv[1] for fuse_main
    strcpy( v[0],"hello");
    strcpy(v[1],"./helloxmp"); //path to mount point

    umask(0); 
    return fuse_main(2, v, &xmp_oper, NULL); //the fuse main call
}
¿Fue útil?

Solución

El problema es que ndk-build está tratando de construir fusexmp como un ejecutable, pero parece que fusexmp no tiene un main la función define (como es requerido por el compilador para crear un archivo ejecutable).Crear una función principal como el punto de entrada del ejecutable, o cambiar fusexmp en una biblioteca, por el cambio de include $(BUILD_EXECUTABLE) a include $(BUILD_SHARED_LIBRARY) en su Android.mk

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top