2017-10-25 22 views
0

他のFSモジュールを正常にインストールしましたが、これは修正できません。私は可能な限り多くの詳細を生成しますが、この質問はFreeSwitch特有の質問ではないかもしれません。任意の一般的なトラブルシューティングの提案をいただければ幸いです。FreeSwitchでmod_ilbcを読み込めませんでした

環境は以下のようなもので、私はfreeswitch-1.6.19ソースを使用しています。

  1. コメントを解除modules.conf
  2. ./configure --prefix=/opt/freeswitch/
  3. make
  4. make install
  5. でライン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
  6. フリーズスタートを開始します。ここで

私は物事が順調に行っている参照証拠です:

  1. 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を分析:
  •  
    $ 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 ---- 
    
  • freeswitchが開始されると、それはdlfcnを使用してモジュールをロードしようとするが、失敗しました。 freeswitch.logの出力:
  •  
    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をリンクに失敗したためであると私には見えますが、なぜですか?問題をさらに解決するには?

    答えて

    0

    問題を定式化して書いているようですが、それを解決するのに役立ちます。問題は今解決されました。

    最初は、私にはlibilbcが必要なのはわからないので、両方ともsudo yum install ilbc-devel ilbc2-develでインストールしました。後で事がうまくいかないときは、私はissueに出くわしました。そのため、バージョン1をsudo yum remove ilbc-develで削除しました。ライブラリファイルを削除していませんでした!

    なお、/usr/lib64/libilbc.so.0.0.1/usr/lib64/libilbc.so.0があり、freeswitchはlibilbcをシークします。バン!

    +0

    この種のライブラリリンクの問題をデバッグするのに便利なコマンドは、 'ldd'です。 'ldd/opt/freeswitch/lib/freeswitch/mod/mod_ilbc.so'はあなたのモジュールをロードするのに必要な共有ライブラリのリストを表示します。 –

    +0

    @PhilippeSultanそれは啓発です。 'ldd'は実際にリンク処理を行っているので、FSが古いファイルにリンクしようとしているのがわかりました。次回は便利だろう。ありがとう – Davyzhu

    関連する問題