[Home]

Summary:ASTERISK-15938: missing libs in link command of chan_h323.so: module fails to load
Reporter:Tzafrir Cohen (tzafrir)Labels:
Date Opened:2010-04-10 11:58:33Date Closed:2011-06-07 14:00:49
Priority:MajorRegression?No
Status:Closed/CompleteComponents:Channels/chan_h323
Versions:Frequency of
Occurrence
Related
Issues:
Environment:Attachments:
Description:It used to be that when building with chan_h323 enabled, asterisk would fail the build after generating channels/h323/Makefile.ast . Now it doesn't. However values from it don't seem to be used when linking channels/chan_h323.so .

$ make clean
$ make NOISY_BUILD=1

 ...

gcc -o chan_gtalk.o -c chan_gtalk.c -MD -MT chan_gtalk.o -MF .chan_gtalk.o.d -MP -pthread -I/home/tzafrir/Proj/Asterisk/Git/asterisk/include   -I/usr/include/libxml2 -pipe -Wall -Wstrict-prototypes -Wmissing-prototypes -Wmissing-declarations -g3 -march=k8  -O0 -fPIC -DAST_MODULE=\"chan_gtalk\"
gcc  -o chan_gtalk.so -pthread      -shared  chan_gtalk.o  -liksemel   -lssl -lcrypto
gcc -o chan_h323.o -c chan_h323.c -MD -MT chan_h323.o -MF .chan_h323.o.d -MP -pthread -I/home/tzafrir/Proj/Asterisk/Git/asterisk/include   -I/usr/include/libxml2 -pipe -Wall -Wstrict-prototypes -Wmissing-prototypes -Wmissing-declarations -g3 -march=k8  -O0 -fPIC -DAST_MODULE=\"chan_h323\"
make -C h323 Makefile.ast
make[2]: Entering directory `/home/tzafrir/Proj/Asterisk/Git/asterisk/channels/h323'
g++ -DNDEBUG -I../../include -include ../../include/asterisk/autoconfig.h -fPIC -D_REENTRANT -Wall -DP_64BIT -fPIC -DPIC -I/usr/share/pwlib//include -DPTRACING -I/usr/share/openh323/include -M ast_h323.cxx >> *.dep
make[2]: Leaving directory `/home/tzafrir/Proj/Asterisk/Git/asterisk/channels/h323'
make[2]: Entering directory `/home/tzafrir/Proj/Asterisk/Git/asterisk/channels/h323'
make[2]: Leaving directory `/home/tzafrir/Proj/Asterisk/Git/asterisk/channels/h323'
make -C h323 libchanh323.a
make[2]: Entering directory `/home/tzafrir/Proj/Asterisk/Git/asterisk/channels/h323'
g++ -DNDEBUG -I../../include -include ../../include/asterisk/autoconfig.h -fPIC  -D_REENTRANT -Wall  -DP_64BIT -fPIC -DPIC -I/usr/share/pwlib//include -DPTRACING -I/usr/share/openh323/include -O2 -pipe  -c ast_h323.cxx -o ast_h323.o
g++ -DNDEBUG -I../../include -include ../../include/asterisk/autoconfig.h -fPIC  -D_REENTRANT -Wall  -DP_64BIT -fPIC -DPIC -I/usr/share/pwlib//include -DPTRACING -I/usr/share/openh323/include -O2 -pipe  -c compat_h323.cxx -o compat_h323.o
g++ -DNDEBUG -I../../include -include ../../include/asterisk/autoconfig.h -fPIC  -D_REENTRANT -Wall  -DP_64BIT -fPIC -DPIC -I/usr/share/pwlib//include -DPTRACING -I/usr/share/openh323/include -O2 -pipe  -c cisco-h225.cxx -o cisco-h225.o
g++ -DNDEBUG -I../../include -include ../../include/asterisk/autoconfig.h -fPIC  -D_REENTRANT -Wall  -DP_64BIT -fPIC -DPIC -I/usr/share/pwlib//include -DPTRACING -I/usr/share/openh323/include -O2 -pipe  -c caps_h323.cxx -o caps_h323.o
ar crv libchanh323.a   ./ast_h323.o  ./compat_h323.o  ./cisco-h225.o  ./caps_h323.o
a - ./ast_h323.o
a - ./compat_h323.o
a - ./cisco-h225.o
a - ./caps_h323.o
make[2]: Leaving directory `/home/tzafrir/Proj/Asterisk/Git/asterisk/channels/h323'
g++ -pthread     -shared -o chan_h323.so chan_h323.o h323/libchanh323.a

 ...


$ ldd channels/chan_h323.so
       linux-vdso.so.1 =>  (0x00007fffc9bff000)
       libstdc++.so.6 => /usr/lib/libstdc++.so.6 (0x00007f32f9a65000)
       libm.so.6 => /lib/libm.so.6 (0x00007f32f97e3000)
       libgcc_s.so.1 => /lib/libgcc_s.so.1 (0x00007f32f95cc000)
       libpthread.so.0 => /lib/libpthread.so.0 (0x00007f32f93b0000)
       libc.so.6 => /lib/libc.so.6 (0x00007f32f905c000)
       /lib64/ld-linux-x86-64.so.2 (0x00007f32fa015000)

If I try to load that module it would fail, due to missing symbols that appear to come from openh323.


Now let's rebuild:

$ rm channels/chan_h323.so
$ make NOISY_BUILD=1

 ...

make[1]: Entering directory `/home/tzafrir/Proj/Asterisk/Git/asterisk/channels'
g++ -pthread     -shared -o chan_h323.so chan_h323.o h323/libchanh323.a -lopenh323 -lresolv -lpt -lldap -llber -lldap_r -lpthread -lsasl2 -lssl -lcrypto -lexpat -lresolv -ldl
make[1]: Leaving directory `/home/tzafrir/Proj/Asterisk/Git/asterisk/channels'

 ...

$ ldd channels/chan_h323.so
       linux-vdso.so.1 =>  (0x00007fffad5ff000)
       libopenh323.so.1.18.0 => /usr/lib/libopenh323.so.1.18.0 (0x00007f5d2d492000)
       libresolv.so.2 => /lib/libresolv.so.2 (0x00007f5d2d27c000)
       libpt.so.1.10.10 => /usr/lib/libpt.so.1.10.10 (0x00007f5d2cc7f000)
       libldap_r-2.4.so.2 => /usr/lib/libldap_r-2.4.so.2 (0x00007f5d2ca34000)
       liblber-2.4.so.2 => /usr/lib/liblber-2.4.so.2 (0x00007f5d2c825000)
       libpthread.so.0 => /lib/libpthread.so.0 (0x00007f5d2c608000)
       libsasl2.so.2 => /usr/lib/libsasl2.so.2 (0x00007f5d2c3ef000)
       libssl.so.0.9.8 => /usr/lib/libssl.so.0.9.8 (0x00007f5d2c19a000)
       libcrypto.so.0.9.8 => /usr/lib/libcrypto.so.0.9.8 (0x00007f5d2bdf9000)
       libexpat.so.1 => /usr/lib/libexpat.so.1 (0x00007f5d2bbd1000)
       libdl.so.2 => /lib/libdl.so.2 (0x00007f5d2b9cd000)
       libstdc++.so.6 => /usr/lib/libstdc++.so.6 (0x00007f5d2b6bc000)
       libm.so.6 => /lib/libm.so.6 (0x00007f5d2b43a000)
       libgcc_s.so.1 => /lib/libgcc_s.so.1 (0x00007f5d2b224000)
       libc.so.6 => /lib/libc.so.6 (0x00007f5d2aecf000)
       libgnutls.so.26 => /usr/lib/libgnutls.so.26 (0x00007f5d2ac2c000)
       /lib64/ld-linux-x86-64.so.2 (0x00007f5d2e189000)
       libz.so.1 => /usr/lib/libz.so.1 (0x00007f5d2aa14000)
       libtasn1.so.3 => /usr/lib/libtasn1.so.3 (0x00007f5d2a804000)
       libgcrypt.so.11 => /usr/lib/libgcrypt.so.11 (0x00007f5d2a58b000)
       libgpg-error.so.0 => /usr/lib/libgpg-error.so.0 (0x00007f5d2a388000)

That looks more like bad old chan_h323.


Now, rebuild, but also remove channels/h323/Makefile.ast:

$ rm channels/chan_h323.so channels/h323/Makefile.ast
$ make NOISY_BUILD=1

 ...

make[1]: Entering directory `/home/tzafrir/Proj/Asterisk/Git/asterisk/channels'
g++ -pthread     -shared -o chan_h323.so chan_h323.o h323/libchanh323.a
make[1]: Leaving directory `/home/tzafrir/Proj/Asterisk/Git/asterisk/channels'

$ ldd channels/chan_h323.so
       linux-vdso.so.1 =>  (0x00007fffdc3ff000)
       libstdc++.so.6 => /usr/lib/libstdc++.so.6 (0x00007f4750a6e000)
       libm.so.6 => /lib/libm.so.6 (0x00007f47507ec000)
       libgcc_s.so.1 => /lib/libgcc_s.so.1 (0x00007f47505d5000)
       libpthread.so.0 => /lib/libpthread.so.0 (0x00007f47503b9000)
       libc.so.6 => /lib/libc.so.6 (0x00007f4750065000)
       /lib64/ld-linux-x86-64.so.2 (0x00007f475101e000)

$ ls channels/h323/Makefile.ast
ls: cannot access channels/h323/Makefile.ast: No such file or directory


As a temporary workaround, I included a simple patch to the main makefile to allow me to cleanly generate channels/h323/Makefile.ast
Comments:By: Leif Madsen (lmadsen) 2010-04-12 10:14:43

Just curious if you were planning on attaching that simple patch here? Thanks!

By: Leif Madsen (lmadsen) 2010-04-19 15:05:28

Since you have access to the code base, and the interest in this channel driver is minor, I'd suggest you just resolve the issue as you see fit.



By: Private Name (falves11) 2010-06-15 15:04:03

I think that for many people h323 is business-critical. Can somebody post the patch or simply update the make file so chan_h323 compiles in 1.6.2X?

By: Leif Madsen (lmadsen) 2010-06-23 13:59:44

If it was business critical for *many* people, then we would see significantly more developers and reporters for that channel driver.

By: Leif Madsen (lmadsen) 2010-07-27 13:32:33

I'm suspending this issue for now. If the reporter or anyone else would like to move this issue forward they are welcome to reopen it. Thanks!