Linux: связь с неопределенными ссылками Alsa - PullRequest
0 голосов
/ 19 марта 2020

Опытный разработчик C ++ здесь (хотя не очень много глубокого опыта с основными деталями компиляторов / линковки). Я нахожусь на Ubuntu 16.04, и не могу связать с библиотекой alsa. У меня установлен libasound2-dev с g cc 9.2.1.

Код, который я использую, отсюда https://gist.github.com/albanpeignier/104902

Мой вывод компиляции:

↳ g++ -L/usr/lib/x86_64-linux-gnu/libasound.so main.cpp

/tmp/cc9z8wYv.o: In function `main':
main.cpp:(.text+0x50): undefined reference to `snd_pcm_open'
main.cpp:(.text+0x67): undefined reference to `snd_strerror'
main.cpp:(.text+0xc2): undefined reference to `snd_pcm_hw_params_malloc'
main.cpp:(.text+0xd9): undefined reference to `snd_strerror'
main.cpp:(.text+0x130): undefined reference to `snd_pcm_hw_params_any'
main.cpp:(.text+0x147): undefined reference to `snd_strerror'
main.cpp:(.text+0x1a3): undefined reference to `snd_pcm_hw_params_set_access'
main.cpp:(.text+0x1ba): undefined reference to `snd_strerror'
main.cpp:(.text+0x214): undefined reference to `snd_pcm_hw_params_set_format'
main.cpp:(.text+0x22b): undefined reference to `snd_strerror'
main.cpp:(.text+0x288): undefined reference to `snd_pcm_hw_params_set_rate_near'
main.cpp:(.text+0x29f): undefined reference to `snd_strerror'
main.cpp:(.text+0x2fb): undefined reference to `snd_pcm_hw_params_set_channels'
main.cpp:(.text+0x312): undefined reference to `snd_strerror'
main.cpp:(.text+0x369): undefined reference to `snd_pcm_hw_params'
main.cpp:(.text+0x380): undefined reference to `snd_strerror'
main.cpp:(.text+0x3d0): undefined reference to `snd_pcm_hw_params_free'
main.cpp:(.text+0x3fa): undefined reference to `snd_pcm_prepare'
main.cpp:(.text+0x411): undefined reference to `snd_strerror'
main.cpp:(.text+0x45f): undefined reference to `snd_pcm_format_width'
main.cpp:(.text+0x4b8): undefined reference to `snd_pcm_readi'
main.cpp:(.text+0x4d2): undefined reference to `snd_strerror'
main.cpp:(.text+0x556): undefined reference to `snd_pcm_close'
collect2: error: ld returned 1 exit status

(я также получаю ту же ошибку, если просто использую -lasound)

Вот где это сбивает с толку, вот символы из libasound.so:

↳ nm -gD /usr/lib/x86_64-linux-gnu/libasound.so
                 U accept
                 U access
0000000000000000 A ALSA_0.9
0000000000000000 A ALSA_0.9.0
0000000000000000 A ALSA_0.9.0rc4
0000000000000000 A ALSA_0.9.0rc8
0000000000000000 A ALSA_0.9.3
0000000000000000 A ALSA_0.9.5
0000000000000000 A ALSA_0.9.7
00000000000ba0b0 T alsa_lisp
00000000000ba390 T alsa_lisp_default_cfg
00000000000ba460 T alsa_lisp_default_cfg_free
00000000000b9f00 T alsa_lisp_free
00000000000ba490 T alsa_lisp_function
000000000002aea0 T alsa_lisp_init_objects
00000000002ff7a0 B alsa_lisp_nil
00000000000ba970 T alsa_lisp_result_free
00000000000ba9e0 T alsa_lisp_seq_count
00000000000ba980 T alsa_lisp_seq_first
00000000000baa20 T alsa_lisp_seq_integer
00000000000ba9a0 T alsa_lisp_seq_next
00000000000baa60 T alsa_lisp_seq_pointer
00000000002ff7e0 B alsa_lisp_t
                 U __assert_fail
                 U bind
...
0000000000077190 T _snd_pcm_null_open
0000000000076f80 T snd_pcm_null_open
00000000002ff778 B __snd_pcm_null_open_dlsym_pcm_001
000000000004e240 T snd_pcm_open
000000000004e330 T snd_pcm_open_fallback
000000000004e2d0 T snd_pcm_open_lconf
...

В (огромном) списке символов, приведенном выше, указан хотя бы 'snd_pcm_open' - так почему я получаю неопределенные ссылки на него?

Чего мне не хватает? Что еще я могу попробовать?

1 Ответ

0 голосов
/ 24 марта 2020

Я нашел решение самостоятельно; но это не решает суть проблемы.

Как я уже говорил, я использовал G CC 9.2.1. Из того, что я могу сказать, установка G CC 9.2.1 вызвала какую-то проблему где-то в цепочке инструментов. Не только библиотека alsa не будет правильно ссылаться, но и библиотека X11.

Решение было go ядерной и переустановить Ubuntu .., что я планировал сделать некоторое время, чтобы получить чистое обновление с 16.04 до 18.04. После установки 18.04 все работало нормально.

...