2017-10-25 7 views
0

Ich habe erfolgreich andere FS-Module installiert, aber diese kann ich nicht beheben. Ich werde so viele Details wie möglich erstellen und diese Frage ist möglicherweise keine FreeSwitch-spezifische Frage. Alle allgemeinen Vorschläge zur Fehlerbehebung werden geschätzt.Loading mod_ilbc in FreeSwitch fehlgeschlagen

Die Umgebung ist wie folgt, und ich benutze Freeswitch-1.6.19 Quelle.

$ 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 ---- 

nahm ich diese Schritte mod_ilbc zu kompilieren:

  1. Kommentar- der Linie codecs/mod_ilbc in modules.conf
  2. ./configure --prefix=/opt/freeswitch/
  3. make
  4. make install
  5. Ändern /opt/freeswitch/etc/freeswitch/vars.xml 0 hinzufügenbis global_codec_prefs.
  6. Freeswitch starten.

Hier sind die Beweise, dass ich die Dinge sehe glatt gehen:

  1. make install erfolgreich installiert mod_ilbc. Der Prozess make erkennt erfolgreich libilbc und verwendet libtool zum Verknüpfen. Ausgaben von make install, beachten Sie die -L/usr/lib64/ilbc2 -lilbc Teil.
 
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 
  1. mod_ilbc richtig zusammengestellt. Es erwartet Symbole wie ilbc_decode von libilbc. Die Analyse 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 ---- 
  1. Nach FreeSWITCH® starten, versucht es, das Modul zu laden mit dlfcn aber nicht. Ausgabe von 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** 

Es scheint mir, dass dies, weil FreeSWITCH® zu verbinden /usr/lib64/ilbc2/libilbc.so gescheitert, aber warum? Wie kann das Problem weiter behoben werden?

Antwort

0

Es scheint, das Problem zu formulieren und es aufzuschreiben hilft, es zu lösen. Problem jetzt gelöst.

Am Anfang weiß ich nicht, welche libilbc ich brauche, also habe ich beide durch sudo yum install ilbc-devel ilbc2-devel installiert. Später, als die Dinge nicht funktionieren, stieß ich auf diese issue, so dass ich Version 1 davon von sudo yum remove ilbc-devel entfernt. ABER DAS ENTFERNTE DIE BIBLIOTHEKSDATEI NICHT!

Dort liegt noch /usr/lib64/libilbc.so.0.0.1 und /usr/lib64/libilbc.so.0, und Freeswitch sucht libilbc von ihnen. KNALL!

+0

Ein Befehl, den ich nützlich fand, um diese Art von Bibliothek Verknüpfung Problem zu debuggen ist 'ldd'. 'ldd/opt/freeswitch/lib/freeswitch/mod/mod_ilbc.so' würde die Liste der gemeinsam genutzten Bibliotheken anzeigen, die benötigt werden, um Ihr Modul zu laden. –

+0

@PhilippeSultan Das ist einleuchtend. 'ldd' geht tatsächlich durch den Linking-Prozess, so dass ich gesehen haben könnte, dass FS versucht, mit der veralteten So-Datei zu verlinken. Würde beim nächsten Mal nützlich sein. Vielen Dank – Davyzhu