1

我已经按照页面说明在 Ubuntu 机器上成功构建了 VLC for Android: 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):开始活动: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): 为活动 org.videolan.vlc.android/.MainActivity 启动 proc org.videolan.vlc.android: pid=3918 uid= 10036 gids={3003} 10-25 15:16:27.807: D/dalvikvm(3918): GC_EXTERNAL_ALLOC 在 141 毫秒内释放了 874 个对象/59912 个字节 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: I/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), 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:16:16:16:28.402:I/DEBUG(I/DEBUG(I/DEBUG(30):IP 00000020): 60000010 10-25 15:16:28.467:我/调试(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

00000060 ffffffff ffffffff ffffffff ffffffff 10-25 15:16:28.477: I/DEBUG(30): 堆栈: 10-25 15:16:28.477: I/DEBUG(30): bebfa230 0027f3a4 [堆] 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 已经恢复 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 已经恢复 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 上运行。

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

4

1 回答 1

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

我觉得

CFLAGS="-march=armv6j -mtune=arm1136j-s -mfloat-abi=softfp"

应该在大多数设备上安全使用。

如果问题再次发生,请尝试使用-gCFLAGS 重新编译并运行 ndk-gdb:

cd vlc-android && $(ANDROID_NDK)/ndk-gdb --start --force --awk=gawk --verbose
于 2011-11-07T07:20:59.930 回答