LINUX.ORG.RU
решено ФорумAdmin

*undefined reference to `speex* - build pjsip

 , , , ,


0

1

Доброго времени суток. Объясню ситуацию. Я уже собирал эту библиотеку следующим образом и все работало хорошо:

./configure --prefix=/usr --enable-shared CFLAGS='-O2 -DNDEBUG'
make dep
make
sudo make install
Спустя время так получилось, что мне пришлось восстанавливать всю систему из tar'a, но там не была собрана эта библиотека. Я скачал исходники с офф сайта и проделал те же операции, чтобы ее собрать. В итоге после make получаю ряд ошибок:
/home/vanya/tmp/pjproject/pjproject-2.6/pjmedia/lib/libpjmedia.so: undefined reference to `speex_echo_cancellation'
/home/vanya/tmp/pjproject/pjproject-2.6/pjmedia/lib/libpjmedia.so: undefined reference to `speex_echo_state_init'
/home/vanya/tmp/pjproject/pjproject-2.6/pjmedia/lib/libpjmedia.so: undefined reference to `speex_echo_capture'
/home/vanya/tmp/pjproject/pjproject-2.6/pjmedia/lib/libpjmedia.so: undefined reference to `speex_preprocess_state_destroy'
/home/vanya/tmp/pjproject/pjproject-2.6/pjmedia/lib/libpjmedia.so: undefined reference to `speex_echo_state_reset'
/home/vanya/tmp/pjproject/pjproject-2.6/pjmedia/lib/libpjmedia.so: undefined reference to `speex_echo_playback'
/home/vanya/tmp/pjproject/pjproject-2.6/pjmedia/lib/libpjmedia.so: undefined reference to `speex_preprocess_state_init'
/home/vanya/tmp/pjproject/pjproject-2.6/pjmedia/lib/libpjmedia.so: undefined reference to `speex_echo_ctl'
/home/vanya/tmp/pjproject/pjproject-2.6/pjmedia/lib/libpjmedia.so: undefined reference to `speex_echo_state_destroy'
/home/vanya/tmp/pjproject/pjproject-2.6/pjmedia/lib/libpjmedia.so: undefined reference to `speex_preprocess_ctl'
/home/vanya/tmp/pjproject/pjproject-2.6/pjmedia/lib/libpjmedia.so: undefined reference to `speex_preprocess_run'
collect2: error: ld returned 1 exit status
make[2]: *** [/home/vanya/tmp/pjproject/pjproject-2.6/build/rules.mak:125: ../bin/pjmedia-test-x86_64-unknown-linux-gnu] Error 1
make[2]: Leaving directory '/home/vanya/tmp/pjproject/pjproject-2.6/pjmedia/build'
make[1]: *** [Makefile:243: pjmedia-test-x86_64-unknown-linux-gnu] Error 2
make[1]: Leaving directory '/home/vanya/tmp/pjproject/pjproject-2.6/pjmedia/build'
make: *** [Makefile:14: all] Error 1
[vanya@Alice ~]$ ls -l /usr/lib/ | grep -i speex
lrwxrwxrwx  1 root root        20 Jun 26  2015 libspeexdsp.so -> libspeexdsp.so.1.5.0
lrwxrwxrwx  1 root root        20 Jun 26  2015 libspeexdsp.so.1 -> libspeexdsp.so.1.5.0
-rwxr-xr-x  1 root root     76024 Jun 26  2015 libspeexdsp.so.1.5.0
lrwxrwxrwx  1 root root        17 Dec 22  2016 libspeex.so.1 -> libspeex.so.1.5.1
-rwxr-xr-x  1 root root    100680 Dec 22  2016 libspeex.so.1.5.1
[vanya@Alice ~]$ ldd /usr/lib/libspeex.so.1.5.1
	linux-vdso.so.1 (0x00007ffd5ffaf000)
	libm.so.6 => /usr/lib/libm.so.6 (0x00007fbf823ce000)
	libc.so.6 => /usr/lib/libc.so.6 (0x00007fbf82028000)
	/usr/lib64/ld-linux-x86-64.so.2 (0x00007fbf828f9000)
Во время старта системы я обнаружил, что некоторые файлы установленных пакетов отсутствуют (понятия не имею, каким образом они потерялись)
pacman -Qkk 2>&1 | grep "No such file or directory"
Я их все переустановил, но проблема со сборкой pjsip никуда не уходит. Гугл не помогает, надеюсь на вашу помощь


Библиотека точно линкуется? Если да, то

undefined reference to `speex_echo_ctl'

не изменилось ли API в этой библиотеке? Может ли быть такое, что в Arch Linux слишком новая версия libspeex, а pjsip требуется старая? Или наоборот.

EXL ★★★★★
()
Ответ на: комментарий от EXL

Speex судя по всему самый свежий у меня. На сайте у них релиз был еще в 2016, а релиз pjsip, который я скачал, - в январе этого года. До развертывания бэкапа месяц назад все собиралось отлично. Сам pjsip какие то свой библиотеки speex собирает:

[vanya@Alice pjproject-2.6]$ ls -l /lib/ | grep -i speex
lrwxrwxrwx  1 root  root         20 Jun 26  2015 libspeexdsp.so -> libspeexdsp.so.1.5.0
lrwxrwxrwx  1 root  root         20 Jun 26  2015 libspeexdsp.so.1 -> libspeexdsp.so.1.5.0
-rwxr-xr-x  1 root  root      76024 Jun 26  2015 libspeexdsp.so.1.5.0
lrwxrwxrwx  1 vanya users        13 Aug 11 09:54 libspeex.so -> libspeex.so.2
lrwxrwxrwx  1 root  root         17 Dec 22  2016 libspeex.so.1 -> libspeex.so.1.5.1
-rwxr-xr-x  1 root  root     100680 Dec 22  2016 libspeex.so.1.5.1
-rwxr-xr-x  1 vanya users    192480 Aug 11 09:54 libspeex.so.2
-rw-r--r--  1 vanya users    306354 Aug 11 09:54 libspeex-x86_64-unknown-linux-gnu.a
Это после make install(/lib=/usr/lib в arch). При самой установке тоже сыпятся ошибки:
il/lib/libpjlib-util.so.2 /home/vanya/tmp/pjproject/pjproject-2.6/pjlib-util/lib/libpjlib-util.so /home/vanya/tmp/pjproject/pjproject-2.6/pjlib/lib/libpj.so.2 /home/vanya/tmp/pjproject/pjproject-2.6/pjlib/lib/libpj.so /usr/lib/
cp: cannot stat '/home/vanya/tmp/pjproject/pjproject-2.6/pjsip/lib/libpjsua2-x86_64-unknown-linux-gnu.a': No such file or directory
cp: cannot stat '/home/vanya/tmp/pjproject/pjproject-2.6/pjsip/lib/libpjsua-x86_64-unknown-linux-gnu.a': No such file or directory
cp: cannot stat '/home/vanya/tmp/pjproject/pjproject-2.6/pjsip/lib/libpjsip-ua-x86_64-unknown-linux-gnu.a': No such file or directory
cp: cannot stat '/home/vanya/tmp/pjproject/pjproject-2.6/pjsip/lib/libpjsip-simple-x86_64-unknown-linux-gnu.a': No such file or directory
cp: cannot stat '/home/vanya/tmp/pjproject/pjproject-2.6/pjsip/lib/libpjsip-x86_64-unknown-linux-gnu.a': No such file or directory
cp: cannot stat '/home/vanya/tmp/pjproject/pjproject-2.6/pjsip/lib/libpjsua2.so.2': No such file or directory
cp: cannot stat '/home/vanya/tmp/pjproject/pjproject-2.6/pjsip/lib/libpjsua2.so': No such file or directory
cp: cannot stat '/home/vanya/tmp/pjproject/pjproject-2.6/pjsip/lib/libpjsua.so.2': No such file or directory
cp: cannot stat '/home/vanya/tmp/pjproject/pjproject-2.6/pjsip/lib/libpjsua.so': No such file or directory
cp: cannot stat '/home/vanya/tmp/pjproject/pjproject-2.6/pjsip/lib/libpjsip-ua.so.2': No such file or directory
cp: cannot stat '/home/vanya/tmp/pjproject/pjproject-2.6/pjsip/lib/libpjsip-ua.so': No such file or directory
cp: cannot stat '/home/vanya/tmp/pjproject/pjproject-2.6/pjsip/lib/libpjsip-simple.so.2': No such file or directory
cp: cannot stat '/home/vanya/tmp/pjproject/pjproject-2.6/pjsip/lib/libpjsip-simple.so': No such file or directory
cp: cannot stat '/home/vanya/tmp/pjproject/pjproject-2.6/pjsip/lib/libpjsip.so.2': No such file or directory
cp: cannot stat '/home/vanya/tmp/pjproject/pjproject-2.6/pjsip/lib/libpjsip.so': No such file or directory
make: *** [Makefile:121: install] Error 1

Rot1
() автор топика
Ответ на: комментарий от Rot1

А, он не полный, только фрагмент с конца

Rot1
() автор топика
Ответ на: комментарий от Rot1

Сам pjsip какие то свой библиотеки speex собирает:

Эти библиотеки установка pjsip собирает как пакетные зависимости отдельно? Или локально в своём каталоге исходников?

Лог сборки посмотрел, ничего подозрительного не заметил.

EXL ★★★★★
()
Ответ на: комментарий от EXL

Там отдельная директория под зависимости - third_party. А собирабтся они через make dep.

[vanya@Alice pjproject-2.6]$ find . -name "*speex*" -print
./build.symbian/libspeexcodec.mmp
./tests/pjsua/scripts-pesq/200_codec_speex_8000.py
./tests/pjsua/scripts-pesq/200_codec_speex_16000.py
./tests/pjsua/scripts-pesq/201_codec_speex_16000.py
./tests/pjsua/scripts-pesq/201_codec_speex_8000.py
./third_party/build/speex
./third_party/build/speex/libspeex.vcxproj
./third_party/build/speex/libspeex.vcp
./third_party/build/speex/libspeex.vcxproj.filters
./third_party/build/speex/speex
./third_party/build/speex/speex/speex_config_types.h
./third_party/build/speex/.libspeex-x86_64-unknown-linux-gnu.depend
./third_party/build/speex/output/libspeex-x86_64-unknown-linux-gnu
./third_party/build/speex/output/libspeex-x86_64-unknown-linux-gnu/speex.o
./third_party/build/speex/output/libspeex-x86_64-unknown-linux-gnu/speex_callbacks.o
./third_party/build/speex/output/libspeex-x86_64-unknown-linux-gnu/speex_header.o
./third_party/build/speex/libspeex.vcproj
./third_party/speex
./third_party/speex/libspeex
./third_party/speex/libspeex/speex.c
./third_party/speex/libspeex/speex_header.c
./third_party/speex/libspeex/speex_callbacks.c
./third_party/speex/include/speex
./third_party/speex/include/speex/speex_config_types.h.in
./third_party/speex/include/speex/speex_echo.h
./third_party/speex/include/speex/speex_resampler.h
./third_party/speex/include/speex/speex_jitter.h
./third_party/speex/include/speex/speex_types.h
./third_party/speex/include/speex/speex_bits.h
./third_party/speex/include/speex/speex_callbacks.h
./third_party/speex/include/speex/speex.h
./third_party/speex/include/speex/speex_buffer.h
./third_party/speex/include/speex/speex_header.h
./third_party/speex/include/speex/speex_stereo.h
./third_party/speex/include/speex/speex_preprocess.h
./third_party/lib/libspeex.so
./third_party/lib/libspeex.so.2
./third_party/lib/libspeex-x86_64-unknown-linux-gnu.a
./pjmedia/build/output/pjmedia-codec-x86_64-unknown-linux-gnu/speex_codec.o
./pjmedia/build/output/pjmedia-x86_64-unknown-linux-gnu/resample_speex.o
./pjmedia/build/output/pjmedia-x86_64-unknown-linux-gnu/echo_speex.o
./pjmedia/src/pjmedia-codec/speex_codec.c
./pjmedia/src/pjmedia/resample_speex.c
./pjmedia/src/pjmedia/echo_speex.c
./pjmedia/include/pjmedia-codec/speex.h

Rot1
() автор топика

Решено

Забавная ситуация возникла. В принципе от такой уличной магии я другого и не ожидал. Удалил каталог с исходниками, распаковал архив с исходниками обратно, собрал библиотеку как обычно - все работает. Либо tar прошлый раз подкачал, либо у них make realclean криво работает. Спасибо Pinkbyte и EXL, что откликнулись

Rot1
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.