答案1
该线程指出语音通话功能需要一个名为“SLVoice”的静态32位二进制文件才能运行。 https://community.secondlife.com/forums/topic/475681-voice-problems/
在 firestorm 日志中我们可以看到这个可执行文件没有运行
WARNING #Voice# newview/llvoicevivox.cpp(962) LLVivoxVoiceClient::callbackEndDaemon : SLVoice terminated {'data':i-1,'desc':'SLVoice (20101)','id':i20101,'state':i0,'string':'SLVoice (20101) exited with code -1'}
WARNING #Voice# newview/llvoicevivox.cpp(2044) LLVivoxVoiceClient::terminateAudioSession : terminateAudioSession(0) with NULL mAudioSession
如何排除故障
从您的 firestorm 安装内部,验证 SLVoice 是否可以使用以下方式找到其所有依赖项ldd
例如,在这个系统上,缺少libidn.so.11。
$ cd ~/Applications/Phoenix-Firestorm-Releasex64-6-6-17-70368/
$ ldd ./bin/SLVoice
linux-gate.so.1 (0xf7ede000)
libortp.so => /home/user/Applications/Phoenix-Firestorm-Releasex64-6-6-17-70368/bin/../lib32/libortp.so (0xf7ea8000)
libsndfile.so.1 => /home/user/Applications/Phoenix-Firestorm-Releasex64-6-6-17-70368/bin/../lib32/libsndfile.so.1 (0xf7e4f000)
libvivoxsdk.so => /home/user/Applications/Phoenix-Firestorm-Releasex64-6-6-17-70368/bin/../lib32/libvivoxsdk.so (0xf7800000)
libvivoxplatform.so => /home/user/Applications/Phoenix-Firestorm-Releasex64-6-6-17-70368/bin/../lib32/libvivoxplatform.so (0xf7702000)
libvivoxoal.so.1 => /home/user/Applications/Phoenix-Firestorm-Releasex64-6-6-17-70368/bin/../lib32/libvivoxoal.so.1 (0xf76b4000)
libz.so.1 => /lib/i386-linux-gnu/libz.so.1 (0xf7665000)
librt.so.1 => /lib/i386-linux-gnu/librt.so.1 (0xf7660000)
libresolv.so.2 => /lib/i386-linux-gnu/libresolv.so.2 (0xf764d000)
libdl.so.2 => /lib/i386-linux-gnu/libdl.so.2 (0xf7648000)
libidn.so.11 => not found
libuuid.so.1 => /lib/i386-linux-gnu/libuuid.so.1 (0xf763e000)
libpthread.so.0 => /lib/i386-linux-gnu/libpthread.so.0 (0xf7639000)
libstdc++.so.6 => /lib/i386-linux-gnu/libstdc++.so.6 (0xf7400000)
libm.so.6 => /lib/i386-linux-gnu/libm.so.6 (0xf72f8000)
libgcc_s.so.1 => /lib/i386-linux-gnu/libgcc_s.so.1 (0xf72d1000)
libc.so.6 => /lib/i386-linux-gnu/libc.so.6 (0xf7000000)
/lib/ld-linux.so.2 (0xf7ee0000)
libidn.so.11 => not found
libidn.so.11 => not found
libidn.so.11 => not found
检查是否可以使用 apt-file 安装
$ apt-file search libidn.so.11
- 没有结果,请再次检查$ apt-file search libidn.so
得出几个结果
$ apt-file search libidn.so
libidn-dev: /usr/lib/x86_64-linux-gnu/libidn.so
libidn12: /usr/lib/x86_64-linux-gnu/libidn.so.12
libidn12: /usr/lib/x86_64-linux-gnu/libidn.so.12.6.3
(ps:如果尚未启用 i386 架构,则需要运行 32 位可执行文件。
dpkg --add-architecture i386
apt-get update
)
在这个系统上,我不确定 libidn 的哪个源版本映射到“12”,所以我检查了 repology,
https://repology.org/project/libidn/versions
who 的记录显示各种系统将最新的 libidn 链接为“libidn12”,但重要的是,最新版本被链接为“libidn11”(由 Cygwin 链接)。这表明 ABI 在 11 和 12 之间可能没有发生太大变化以至于它们变得不兼容,通常这就是版本增加所暗示的。YMMV。我选择此时不从源代码重新编译此系统的 libidn,并尝试将 libidn.11 链接到 libidn.so.12。有多种方法可以做到这一点,但不建议这样做,并且可能会破坏您的系统,因此您可以从这里开始 DIY。
一个不完整的例子,我们可以使用 LD_LIBRARY_PATH 将 ./foo-i386-linux-gnu/ 添加到链接器路径LD_LIBRARY_PATH=$PWD/foo-i386-linux-gnu/
,然后链接32 位libidn.so.12 版本为 ./foo-i386-linux-gnu/libidn.so.11,并在启动 firestorm 之前注入 LD_LIBRARY_PATH,例如LD_LIBRARY_PATH=$PWD/foo-i386-linux-gnu/ ./firestorm
在这个系统上似乎可以工作,但构建 SLVoice 期望的源代码版本并将其安装为 libidn.so.11 总是更合适的
https://repology.org/project/libidn/versions 还显示大多数系统使用 libidn 1.33 来提供 libidn.so.11,因此这里有一个编译并将其添加到 firestorm 的示例
$ cd Phoenix-Firestorm-Releasex64-6-6-17-70368
# prepare working directory
$ mkdir devel
$ cd devel
# acquite libidn 1.33
$ https://ftp.gnu.org/gnu/libidn/libidn-1.33.tar.gz
$ tar -xvzf libidn-1.33.tar.gz
$ cd libidn-1.33/
# prepare out of tree build (as subdirectory) for i386 lib
$ mkdir build32
$ cd build32
# (note, you may need a compiler first)
#sudo apt-get install build-essential
$ ../configure --build=i686-pc-linux-gnu CFLAGS=-m32 CXXFLAGS=-m32 LDFLAGS=-m32
$ make
# install build artifacts to staging directory ./prefix, you can `sudo make
# install` or replace DESTDIR with any other preffered system root, or
# configure the build with a different --prefix
# this is fine
$ make install DESTDIR=$PWD/prefix/
# locate the produced dll
$ fine ./prefix/ | grep -i libidn.so
# link (here symbolic but you could also hard link, or copy)
$ ln -sr ./prefix/usr/local/lib/libidn.so.11 ../../../lib32/
# verify firestorm picks up this new library, if not, you might have the wrong --build architecture
$ ldd ../../../bin/SLVoice
linux-gate.so.1 (0xf7f12000)
libortp.so => /home/user/Applications/Phoenix-Firestorm-Releasex64-6-6-17-70368/b/libidn-1.33/build32/../../../bin/../lib32/libortp.so (0xf7edc000)
libsndfile.so.1 => /home/user/Applications/Phoenix-Firestorm-Releasex64-6-6-17-70368/b/libidn-1.33/build32/../../../bin/../lib32/libsndfile.so.1 (0xf7e83000)
libvivoxsdk.so => /home/user/Applications/Phoenix-Firestorm-Releasex64-6-6-17-70368/b/libidn-1.33/build32/../../../bin/../lib32/libvivoxsdk.so (0xf7800000)
libvivoxplatform.so => /home/user/Applications/Phoenix-Firestorm-Releasex64-6-6-17-70368/b/libidn-1.33/build32/../../../bin/../lib32/libvivoxplatform.so (0xf7702000)
libvivoxoal.so.1 => /home/user/Applications/Phoenix-Firestorm-Releasex64-6-6-17-70368/b/libidn-1.33/build32/../../../bin/../lib32/libvivoxoal.so.1 (0xf76b4000)
libz.so.1 => /lib/i386-linux-gnu/libz.so.1 (0xf7696000)
librt.so.1 => /lib/i386-linux-gnu/librt.so.1 (0xf7e4d000)
libresolv.so.2 => /lib/i386-linux-gnu/libresolv.so.2 (0xf7681000)
libdl.so.2 => /lib/i386-linux-gnu/libdl.so.2 (0xf767c000)
libidn.so.11 => /home/user/Applications/Phoenix-Firestorm-Releasex64-6-6-17-70368/b/libidn-1.33/build32/../../../bin/../lib32/libidn.so.11 (0xf7646000)
libuuid.so.1 => /lib/i386-linux-gnu/libuuid.so.1 (0xf763c000)
libpthread.so.0 => /lib/i386-linux-gnu/libpthread.so.0 (0xf7637000)
libstdc++.so.6 => /lib/i386-linux-gnu/libstdc++.so.6 (0xf7400000)
libm.so.6 => /lib/i386-linux-gnu/libm.so.6 (0xf72f8000)
libgcc_s.so.1 => /lib/i386-linux-gnu/libgcc_s.so.1 (0xf72d1000)
libc.so.6 => /lib/i386-linux-gnu/libc.so.6 (0xf7000000)
/lib/ld-linux.so.2 (0xf7f14000)
最后要说的是,libidn 是一个非常良好且易于使用的库,可以从源代码安装。