VLC for Android运行错误 - libvlcjni.so问题

时间:2011-10-30 12:29:51

标签: android android-emulator android-ndk vlc libvlc

我已经通过该页面的说明在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上运行,可能是低级错误。

我是否必须更改构建/编译的任何设置? 请帮助我,谢谢:)

1 个答案:

答案 0 :(得分:1)

SIGILL表示您的二进制文件包含设备CPU不支持的指令。可能你已经打破了CFLAGS。

尝试:

  1. 检查

    中的结果CFLAGS
    • extras / contrib / bootstrap(在文件的位置添加echo $CFLAGS行以供检查)
    • extras / package / android / configure(在最后一次运行之前添加echo $CFLAGS ./configure)
  2. 检查是否真的选择了--disable-neon(在extras / package / android中)

  3. 在extras / contrib文件夹中运行make clean以清除旧库(这一重要步骤)。

  4. 重建贡献&& libvlc

  5. 检查vlc / android /是否包含* _neon.a库

  6. 删除vlc-android / jni / libvlcjni.h并重建apk

  7. 我想,那

    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