Non è possibile creare fusibile Android modificato con NDK-Build
-
11-12-2019 - |
Domanda
Durante la compilazione con NDK-Build, ottengo il seguente errore:
/* 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
.
Ho modificato FUSEXMP.C modificato come segue:
#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
}
. Soluzione
Il problema è che ndk-build
sta tentando di costruire fusexmp
come eseguibile, ma sembra che fusexmp
non abbia una funzione main
definita (come richiesto dal compilatore per creare un eseguibile).Creare una funzione principale come punto di ingresso del programma eseguibile o modifica fusexmp
in una libreria, modificando include $(BUILD_EXECUTABLE)
in include $(BUILD_SHARED_LIBRARY)
in Android.mk
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow