他のFSモジュールを正常にインストールしましたが、これは修正できません。私は可能な限り多くの詳細を生成しますが、この質問はFreeSwitch特有の質問ではないかもしれません。任意の一般的なトラブルシューティングの提案をいただければ幸いです。FreeSwitchでmod_ilbcを読み込めませんでした
環境は以下のようなもので、私はfreeswitch-1.6.19ソースを使用しています。
- コメントを解除
modules.conf
./configure --prefix=/opt/freeswitch/
make
make install
- でライン
codecs/mod_ilbc
変更/opt/freeswitch/etc/freeswitch/vars.xml
0を追加する:mod_ilbc
私はコンパイルするためにこれらのステップを取りました〜$ cat /etc/redhat-release CentOS Linux release 7.2.1511 (Core) $ ls /usr/lib64/ilbc2/ -lh total 64K lrwxrwxrwx. 1 root root 16 Oct 24 20:18 libilbc.so -> libilbc.so.0.0.2 lrwxrwxrwx. 1 root root 16 Sep 18 18:03 libilbc.so.0 -> libilbc.so.0.0.2 -rwxr-xr-x. 1 root root 64K Jun 23 2015 libilbc.so.0.0.2 $ nm -D /usr/lib64/ilbc2/libilbc.so --- omitted many lines ---- 0000000000007590 T ilbc_decode 0000000000007790 T ilbc_decode_init 0000000000007c30 T ilbc_encode 0000000000008f80 T ilbc_encode_init --- omitted many lines ----
global_codec_prefs
。 - フリーズスタートを開始します。ここで
私は物事が順調に行っている参照証拠です:
make install
が正常mod_ilbcをインストールしますが。make
プロセスはlibilbc
を正常に検出し、libtool
を使用してリンクします。make install
の出力は、-L/usr/lib64/ilbc2 -lilbc
部分に注意してください。
making install mod_ilbc make[4]: Entering directory `/home/cenzhe.zhu/freeswitch-1.6.19/src/mod/codecs/mod_ilbc' make[5]: Entering directory `/home/cenzhe.zhu/freeswitch-1.6.19/src/mod/codecs/mod_ilbc' make[5]: Nothing to be done for `install-exec-am'. test -z "/opt/freeswitch/lib/freeswitch/mod" || /usr/bin/mkdir -p "/opt/freeswitch/lib/freeswitch/mod" /bin/sh /home/cenzhe.zhu/freeswitch-1.6.19/libtool --mode=install /usr/bin/install -c mod_ilbc.la '/opt/freeswitch/lib/freeswitch/mod' libtool: install: (cd /home/cenzhe.zhu/freeswitch-1.6.19/src/mod/codecs/mod_ilbc; /bin/sh /home/cenzhe.zhu/freeswitch-1.6.19/libtool --silent --tag CC --mode=relink gcc -I/usr/include/uuid -I/home/cenzhe.zhu/freeswitch-1.6.19/src/include -I/home/cenzhe.zhu/freeswitch-1.6.19/src/include -I/home/cenzhe.zhu/freeswitch-1.6.19/libs/libteletone/src -fPIC -Werror -Wno-unused-result -fvisibility=hidden -DSWITCH_API_VISIBILITY=1 -DHAVE_VISIBILITY=1 -g -ggdb -DHAVE_OPENSSL -Wall -std=c99 -pedantic -Wdeclaration-after-statement -I/usr/include/ilbc2 -g -O2 -avoid-version -module -no-undefined -shared -o mod_ilbc.la -rpath /opt/freeswitch/lib/freeswitch/mod mod_ilbc_la-mod_ilbc.lo /home/cenzhe.zhu/freeswitch-1.6.19/libfreeswitch.la -L/usr/lib64/ilbc2 -lilbc -lssl -lcrypto) libtool: install: /usr/bin/install -c .libs/mod_ilbc.soT /opt/freeswitch/lib/freeswitch/mod/mod_ilbc.so libtool: install: /usr/bin/install -c .libs/mod_ilbc.lai /opt/freeswitch/lib/freeswitch/mod/mod_ilbc.la libtool: finish: PATH="/sbin:/bin:/usr/sbin:/usr/bin:/sbin" ldconfig -n /opt/freeswitch/lib/freeswitch/mod ---------------------------------------------------------------------- Libraries have been installed in: /opt/freeswitch/lib/freeswitch/mod
mod_ilbc
が正しくコンパイルされます。ilbc_decode
のようなシンボルはlibilbc
になります。mod_ilbc.so
を分析:- freeswitchが開始されると、それは
dlfcn
を使用してモジュールをロードしようとするが、失敗しました。freeswitch.log
の出力:
$ nm -D /opt/freeswitch/lib/freeswitch/mod/mod_ilbc.so --- omitted many lines ---- 0000000000001060 T _fini w __gmon_start__ U ilbc_decode U ilbc_decode_init U ilbc_encode U ilbc_encode_init --- omitted many lines ----
-
は
2017-10-25 13:54:24.243208 [CRIT] switch_loadable_module.c:1528 Error Loading module /opt/freeswitch/lib/freeswitch/mod/mod_ilbc.so **/opt/freeswitch/lib/freeswitch/mod/mod_ilbc.so: undefined symbol: ilbc_decode**
freeswitchが/usr/lib64/ilbc2/libilbc.so
をリンクに失敗したためであると私には見えますが、なぜですか?問題をさらに解決するには?
この種のライブラリリンクの問題をデバッグするのに便利なコマンドは、 'ldd'です。 'ldd/opt/freeswitch/lib/freeswitch/mod/mod_ilbc.so'はあなたのモジュールをロードするのに必要な共有ライブラリのリストを表示します。 –
@PhilippeSultanそれは啓発です。 'ldd'は実際にリンク処理を行っているので、FSが古いファイルにリンクしようとしているのがわかりました。次回は便利だろう。ありがとう – Davyzhu