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

发布于 2024-12-12 20:25:22 字数 3859 浏览 6 评论 0原文

我已经按照页面的说明在 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):启动过程 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 对象 / 141 毫秒内 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:我/调试(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/调试(30):r4 002fbc18 r5 0027f2a8 r6 82e7379c r7 00286ea8 10-25 15:16:28.402:我/调试(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/调试(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):电脑周围的代码:10-25 15:16:28.477: I/调试(30):8236c04c e1a00005 e1a01007 ebfffcf5 e2504000 10-25 15:16:28.477:我/调试(30):8236c05c 0a00004f e35a0000 1a000025 e5943018 10-25 15:16:28.477: I/调试(30): 8236c06c e6ef0073 e3500010 0a000031 e1a00005 10-25 15:16:28.477: I/调试(30): 8236c07c e28da038 e1a01004 ebfffed4 e1a0000a 10-25 15:16:28.477: I/调试(30): 8236c08c e5941014 e1a0e00f e591f004 e1c420d8 10-25 15:16:28.477:我/调试(30): lr 周围的代码:10-25 15:16:28.477: I/DEBUG(30): 00000020 ffffffff ffffffff ffffffff ffffffff 10-25 15:16:28.477: I/调试(30): 00000030 ffffffff ffffffff ffffffff ffffffff 10-25 15:16:28.477:我/调试(30): 00000040 ffffffff ffffffff ffffffff ffffffff 10-25 15:16:28.477: 我/调试(30):00000050 ffffffff ffffffff ffffffff ffffffff 10-25 15:16:28.477:我/调试(30):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 中恢复

看起来主库“libvlcjni.so”无法加载;出现“SIGILL”错误!

我的.so文件包含机器代码无法在模拟器和我的手机的CPU上运行,这可能是低级错误。

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

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 :)

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

我早已燃尽 2024-12-19 20:25:22

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

尝试:

  1. 检查生成的 CFLAGS

    • extras/contrib/bootstrap(在文件末尾添加 echo $CFLAGS 行进行检查)
    • extras/package/android/configure(在运行最后一个./configure之前添加echo $CFLAGS
  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"

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

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

cd vlc-android && $(ANDROID_NDK)/ndk-gdb --start --force --awk=gawk --verbose

SIGILL means that your binary contains instructions which are not supported by device CPU. Probably, you have broken CFLAGS.

Try:

  1. Check resulting CFLAGS in

    • extras/contrib/bootstrap (add echo $CFLAGS line at the of the file for check)
    • extras/package/android/configure (add echo $CFLAGS before running last ./configure)
  2. Check if --disable-neon is really selected (in extras/package/android)

  3. Run make clean in extras/contrib folder for clearing old libraries (this important step).

  4. Rebuild contrib && libvlc

  5. Check if vlc/android/ contains no *_neon.a libraries

  6. Remove vlc-android/jni/libvlcjni.h and rebuild apk

I think, that

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

should be safely used on most devices.

If problem will happen again, try to recompile with -g CFLAGS and run ndk-gdb:

cd vlc-android && $(ANDROID_NDK)/ndk-gdb --start --force --awk=gawk --verbose
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文