我已经通过该页面的说明在Ubuntu机器上成功构建了适用于Android的VLC: http://wiki.videolan.org/AndroidCompile
PS:我设置了“export NO_NEON = 1”
环境:Ubuntu 11.10 32位,Java JDK 6u29 32位,Android SDK R14,Android NDK R6B
但是当我试图在模拟器上运行“VLC-debug.apk”或“VLC-debug-unaligned.apk”时 (我尝试过Andorid 2.2和Android 2.3.3) 我跑完后程序立即退出。
然后,我尝试在真正的手机上运行它们(HTC Wildfire,Android 2.2) 结果是一样的。 (并显示应用程序错误弹出窗口)
我使用eclipse的DDMS LogCat检查是否有任何奇怪的消息;我找到了:
10-25 15:16:27.007:I / ActivityManager(70):开始活动:意图{ 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):启动proc org.videolan.vlc.android用于活动 org.videolan.vlc.android/.MainActivity:pid = 3918 uid = 10036 gids = {3003} 10-25 15:16:27.807:D / dalvikvm(3918):GC_EXTERNAL_ALLOC被释放874 对象/ 59912字节,141ms 10-25 15:16:28.097:D / dalvikvm(3918): 试图加载lib /data/data/org.videolan.vlc.android/lib/libvlcjni.so 0x44f3eb48 10-25 15:16:28.167:D / dalvikvm(3918):添加了共享库 /data/data/org.videolan.vlc.android/lib/libvlcjni.so 0x44f3eb48 10-25 15:16:28.167:V / VLC / LibVLC(3918):初始化LibVLC 10-25 15:16:28.402:我/ DEBUG(30): * * * * * * * * * * * * * * * * 10-25 15:16:28.402:I / DEBUG (30):构建指纹:'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):信号4 (SIGILL),故障地址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):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): 代码周围:10-25 15:16:28.477:I / DEBUG(30):00000020 ffffffff ffffffff ffffffff fffffff 10-25 15:16:28.477:I / DEBUG(30):00000030 ffffffff ffffffff ffffffff fffffff 10-25 15:16:28.477:I / DEBUG(30): 00000040 ffffffff ffffffff ffffffff fffffff 10-25 15:16:28.477: I / DEBUG(30):00000050 ffffffff ffffffff ffffffff fffffff 10-25 15:16:28.477:I / DEBUG(30):00000060 ffffffff ffffffff ffffffff fffffff 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):过程3918由信号终止 (4)10-25 15:16:28.917:I / ActivityManager(70):处理 org.videolan.vlc.android(pid 3918)已经去世。 10-25 15:16:28.927: I / UsageStats(70):com.android.launcher的意外恢复 已经在org.videolan.vlc.android中恢复了
看起来无法加载主库“ libvlcjni.so ”;有一个“ SIGILL ”错误!
我的.so文件中包含的机器代码无法在模拟器和手机的CPU上运行,可能是低级错误。
我是否必须更改构建/编译的任何设置? 请帮助我,谢谢:)
答案 0 :(得分:1)
SIGILL表示您的二进制文件包含设备CPU不支持的指令。可能你已经打破了CFLAGS。
尝试:
检查
中的结果CFLAGSecho $CFLAGS
行以供检查)echo $CFLAGS
./configure)检查是否真的选择了--disable-neon
(在extras / package / android中)
在extras / contrib文件夹中运行make clean
以清除旧库(这一重要步骤)。
重建贡献&& libvlc
检查vlc / android /是否包含* _neon.a库
删除vlc-android / jni / libvlcjni.h并重建apk
我想,那
CFLAGS="-march=armv6j -mtune=arm1136j-s -mfloat-abi=softfp"
应该在大多数设备上安全使用。
如果问题再次发生,请尝试使用-g
CFLAGS重新编译并运行ndk-gdb:
cd vlc-android && $(ANDROID_NDK)/ndk-gdb --start --force --awk=gawk --verbose