I have successfully built VLC for Android on Ubuntu machine by instructions of the page:
http://wiki.videolan.org/AndroidCompile
PS: I have set “export NO_NEON=1”
Environment: Ubuntu 11.10 32-bit, Java JDK 6u29 32-bit, Android SDK R14, Android NDK R6B
But when I tried to run “VLC-debug.apk” or “VLC-debug-unaligned.apk” on emulator,
(I tried Andorid 2.2 and Android 2.3.3)
The program quits immediately after I run.
Then, I tried to run them on real phone (HTC Wildfire, with Android 2.2)
The result is same. (and a application error popup shows)
I used DDMS LogCat of eclipse to check if any strange messages; I found:
10-25 15:16:27.007: I/ActivityManager(70): Starting activity: Intent {
act=android.intent.action.MAIN cat=[android.intent.category.LAUNCHER]
flg=0x10200000 cmp=org.videolan.vlc.android/.MainActivity } 10-25
15:16:27.067: I/ActivityManager(70): Start proc
org.videolan.vlc.android for activity
org.videolan.vlc.android/.MainActivity: pid=3918 uid=10036 gids={3003}
10-25 15:16:27.807: D/dalvikvm(3918): GC_EXTERNAL_ALLOC freed 874
objects / 59912 bytes in 141ms 10-25 15:16:28.097: D/dalvikvm(3918):
Trying to load lib
/data/data/org.videolan.vlc.android/lib/libvlcjni.so 0x44f3eb48 10-25
15:16:28.167: D/dalvikvm(3918): Added shared lib
/data/data/org.videolan.vlc.android/lib/libvlcjni.so 0x44f3eb48 10-25
15:16:28.167: V/VLC/LibVLC(3918): Initializing LibVLC 10-25
15:16:28.402: I/DEBUG(30): * ** * ** * ** *
** * ** * 10-25 15:16:28.402: I/DEBUG(30): Build fingerprint: ‘generic/sdk/generic/:2.2/FRF91/43546:eng/test-keys’
10-25 15:16:28.402: I/DEBUG(30): pid: 3918, tid: 3918 >>>
org.videolan.vlc.android <<< 10-25 15:16:28.402: I/DEBUG(30): signal 4
(SIGILL), fault addr 8236c06c 10-25 15:16:28.402: I/DEBUG(30): r0
002fbc18 r1 002fbc80 r2 00000000 r3 00000040 10-25 15:16:28.402:
I/DEBUG(30): r4 002fbc18 r5 0027f2a8 r6 82e7379c r7 00286ea8 10-25
15:16:28.402: I/DEBUG(30): r8 00001630 r9 bebfa71c 10 00000040 fp
0027f280 10-25 15:16:28.402: I/DEBUG(30): ip 00000020 sp bebfa270 lr
00000040 pc 8236c06c cpsr 60000010 10-25 15:16:28.467: I/DEBUG(30):00 pc 8236c06c /data/data/org.videolan.vlc.android/lib/libvlcjni.so 10-25 15:16:28.477: I/DEBUG(30): #01 lr 00000040 10-25
15:16:28.477: I/DEBUG(30): code around pc: 10-25 15:16:28.477:
I/DEBUG(30): 8236c04c e1a00005 e1a01007 ebfffcf5 e2504000 10-25
15:16:28.477: I/DEBUG(30): 8236c05c 0a00004f e35a0000 1a000025
e5943018 10-25 15:16:28.477: I/DEBUG(30): 8236c06c e6ef0073 e3500010
0a000031 e1a00005 10-25 15:16:28.477: I/DEBUG(30): 8236c07c e28da038
e1a01004 ebfffed4 e1a0000a 10-25 15:16:28.477: I/DEBUG(30): 8236c08c
e5941014 e1a0e00f e591f004 e1c420d8 10-25 15:16:28.477: I/DEBUG(30):
code around lr: 10-25 15:16:28.477: I/DEBUG(30): 00000020 ffffffff
ffffffff ffffffff ffffffff 10-25 15:16:28.477: I/DEBUG(30): 00000030
ffffffff ffffffff ffffffff ffffffff 10-25 15:16:28.477: I/DEBUG(30):
00000040 ffffffff ffffffff ffffffff ffffffff 10-25 15:16:28.477:
I/DEBUG(30): 00000050 ffffffff ffffffff ffffffff ffffffff 10-25
15:16:28.477: I/DEBUG(30): 00000060 ffffffff ffffffff ffffffff
ffffffff 10-25 15:16:28.477: I/DEBUG(30): stack: 10-25 15:16:28.477:
I/DEBUG(30): bebfa230 0027f3a4 [heap] 10-25 15:16:28.477: I/DEBUG(30):
bebfa234 8236bb94 /data/data/org.videolan.vlc.android/lib/libvlcjni.so
……………………………………………………………………………….
10-25 15:16:28.917: D/Zygote(32): Process 3918 terminated by signal
(4) 10-25 15:16:28.917: I/ActivityManager(70): Process
org.videolan.vlc.android (pid 3918) has died. 10-25 15:16:28.927:
I/UsageStats(70): Unexpected resume of com.android.launcher while
already resumed in org.videolan.vlc.android
It looks like the main library “libvlcjni.so” can not be loaded; There is a “SIGILL” error!
It may be low-level error that my .so file contains machine code can’t be run on the CPU of emulator and my phone .
Do I have to change any settings of building/compiling?
Please help me, thanks 🙂
SIGILL means that your binary contains instructions which are not supported by device CPU. Probably, you have broken CFLAGS.
Try:
Check resulting CFLAGS in
echo $CFLAGSline at the of the file for check)echo $CFLAGSbefore running last ./configure)Check if
--disable-neonis really selected (in extras/package/android)Run
make cleanin extras/contrib folder for clearing old libraries (this important step).Rebuild contrib && libvlc
Check if vlc/android/ contains no *_neon.a libraries
Remove vlc-android/jni/libvlcjni.h and rebuild apk
I think, that
should be safely used on most devices.
If problem will happen again, try to recompile with
-gCFLAGS and run ndk-gdb: