thestk / rtaudio

A set of C++ classes that provide a common API for realtime audio input/output across Linux (native ALSA, JACK, PulseAudio and OSS), Macintosh OS X (CoreAudio and JACK), and Windows (DirectSound, ASIO, and WASAPI) operating systems.
Other
1.49k stars 317 forks source link

Missing symbols in version >= 6 #406

Closed terminator356 closed 1 year ago

terminator356 commented 1 year ago

Hello. We have used rtaudio for several years now.

Today I tried building and installing either version 6.0.0 or 6.0.1 No errors. Seems fine.

I have added the necessary support for >=6 in our app. Minor changes, really. Three places: Error returns, and checking if the DeviceInfo ID is non-zero instead of checking the old 'probed' member.

But when building our app I am now getting four missing rtaudio library symbols, as shown in the printouts below: RtAudio::RtAudio (constructor), RtApi::getDeviceInfo, RtAudio::openStream, and RtApi::getDeviceCount.

I've checked and tried everthing I can think of. Any ideas what could be wrong? Thanks.

Some output:

Our cmake configuration script output:
======================================
-- Checking for module 'rtaudio>=5.0'
--   Found rtaudio, version 6.0.0
Diagnostic printout of the contents of ${RTAUDIO_LIBRARIES}:
rtaudio libs: rtaudio

Contents of cmake link.txt in the build directory of the offending error (showing that -lrtaudio is included):
==============================================================================================================
/usr/bin/c++ -fPIC  -Werror=format-security -Wextra -Winvalid-pch -fexceptions -Wall -fPIC -O0 -g -g -DQT_DEBUG -Werror 
-shared -Wl,-soname,libmuse_driver.so -o libmuse_driver.so CMakeFiles/driver.dir/alsamidi.cpp.o CMakeFiles/driver.dir
/alsatimer.cpp.o CMakeFiles/driver.dir/audiodev.cpp.o CMakeFiles/driver.dir/dummyaudio.cpp.o CMakeFiles/driver.dir
/jack.cpp.o CMakeFiles/driver.dir/jackmidi.cpp.o CMakeFiles/driver.dir/posixtimer.cpp.o CMakeFiles/driver.dir/rtaudio.cpp.o 
CMakeFiles/driver.dir/rtctimer.cpp.o  
-Wl,-rpath,/home/me/muse_20220930/lib/muse-4.1/modules -lasound -ljack -ljack /usr/lib64/libQt5UiTools.a 
-lrtaudio ../mplugins/libmuse_mplugins.so ../widgets/libmuse_widgets.so /usr/lib64/libQt5UiTools.a 
/usr/lib64//libQt5Widgets.so /usr/lib64//libQt5Gui.so /usr/lib64//libQt5Core.so /usr/lib64//libQt5Widgets.so 
/usr/lib64//libQt5Gui.so /usr/lib64//libQt5Core.so /usr/lib64/libGL.so /usr/lib64/libQt5Xml.so.5.15.2 
/usr/lib64/libQt5Svg.so.5.15.2 /usr/lib64/libQt5Widgets.so.5.15.2 /usr/lib64/libQt5Gui.so.5.15.2 
/usr/lib64/libQt5Core.so.5.15.2

Results of compiling and linking:
=================================
Consolidate compiler generated dependencies of target muse
[ 99%] Linking CXX executable muse4
/usr/lib64/gcc/x86_64-suse-linux/11/../../../../x86_64-suse-linux/bin/ld: driver/libmuse_driver.so: undefined reference to `RtAudio::RtAudio(RtAudio::Api, std::function<void (RtAudioErrorType, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&)>&&)'
/usr/lib64/gcc/x86_64-suse-linux/11/../../../../x86_64-suse-linux/bin/ld: driver/libmuse_driver.so: undefined reference to `RtApi::getDeviceInfo(unsigned int)'
/usr/lib64/gcc/x86_64-suse-linux/11/../../../../x86_64-suse-linux/bin/ld: driver/libmuse_driver.so: undefined reference to `RtAudio::openStream(RtAudio::StreamParameters*, RtAudio::StreamParameters*, unsigned long, unsigned int, unsigned int*, int (*)(void*, void*, unsigned int, double, unsigned int, void*), void*, RtAudio::StreamOptions*)'
/usr/lib64/gcc/x86_64-suse-linux/11/../../../../x86_64-suse-linux/bin/ld: driver/libmuse_driver.so: undefined reference to `RtApi::getDeviceCount()'
collect2: error: ld returned 1 exit status
make[2]: *** [muse/CMakeFiles/muse.dir/build.make:412: muse/muse4] Error 1
make[1]: *** [CMakeFiles/Makefile2:2240: muse/CMakeFiles/muse.dir/all] Error 2
make: *** [Makefile:156: all] Error 2
*** Échec : Code de sortie 2 ***

What's inside librtaudio?
objdump -TC /usr/local/lib64/librtaudio.so.6.0.0
=================================================

/usr/local/lib64/librtaudio.so.6.0.0:     format de fichier elf64-x86-64

DYNAMIC SYMBOL TABLE:
0000000000000000      DF *UND*  0000000000000000  GLIBC_2.3.2 pthread_cond_signal
0000000000000000      DF *UND*  0000000000000000  GLIBC_2.2.5 sched_getscheduler
0000000000000000      DF *UND*  0000000000000000  GLIBCXX_3.4 std::ostream::put(char)
0000000000000000      DF *UND*  0000000000000000  PULSE_0     pa_xfree
0000000000000000      DF *UND*  0000000000000000  PULSE_0     pa_context_errno
0000000000000000      DF *UND*  0000000000000000  ALSA_0.9    snd_ctl_pcm_next_device
0000000000000000      DF *UND*  0000000000000000  GLIBC_2.2.5 sprintf
0000000000000000      DO *UND*  0000000000000000  GLIBCXX_3.4 vtable for std::basic_ios<char, std::char_traits<char> >
0000000000000000      DF *UND*  0000000000000000  ALSA_0.9    snd_pcm_info_set_subdevice
0000000000000000      DF *UND*  0000000000000000  ALSA_0.9    snd_ctl_pcm_info
0000000000000000      DF *UND*  0000000000000000  PULSE_0     pa_strerror
0000000000000000      DF *UND*  0000000000000000              jack_set_xrun_callback
0000000000000000      DF *UND*  0000000000000000  ALSA_0.9    snd_ctl_card_info_get_name
0000000000000000      DF *UND*  0000000000000000  GLIBCXX_3.4.21 std::__cxx11::basic_ostringstream<char, std::char_traits<char>, std::allocator<char> >::~basic_ostringstream()
0000000000000000      DF *UND*  0000000000000000              jack_port_register
0000000000000000      DF *UND*  0000000000000000  ALSA_0.9    snd_pcm_hw_params_set_access
0000000000000000      DF *UND*  0000000000000000  GLIBCXX_3.4.21 std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >::compare(char const*) const
0000000000000000      DF *UND*  0000000000000000  ALSA_0.9    snd_ctl_card_info
0000000000000000      DF *UND*  0000000000000000  ALSA_0.9    snd_pcm_sw_params_set_silence_threshold
0000000000000000      DF *UND*  0000000000000000  GLIBCXX_3.4 std::ios_base::ios_base()
0000000000000000      DF *UND*  0000000000000000  GLIBCXX_3.4 std::ios_base::~ios_base()
0000000000000000      DF *UND*  0000000000000000  PULSE_0     pa_simple_flush
0000000000000000      DF *UND*  0000000000000000  GLIBCXX_3.4 std::__throw_bad_alloc()
0000000000000000      DF *UND*  0000000000000000  ALSA_0.9    snd_pcm_readi
0000000000000000      DF *UND*  0000000000000000  CXXABI_1.3  __cxa_begin_catch
0000000000000000      DF *UND*  0000000000000000  PULSE_0     pa_simple_drain
0000000000000000      DF *UND*  0000000000000000  ALSA_0.9.0rc4 snd_pcm_hw_params_get_channels_max
0000000000000000      DF *UND*  0000000000000000              jack_client_close
0000000000000000      DF *UND*  0000000000000000  ALSA_0.9    snd_pcm_delay
0000000000000000  w   DF *UND*  0000000000000000  GLIBC_2.2.5 __cxa_finalize
0000000000000000      DF *UND*  0000000000000000  GLIBC_2.2.5 strlen
0000000000000000      DF *UND*  0000000000000000  GLIBC_2.2.5 memcmp
0000000000000000      DF *UND*  0000000000000000              jack_connect
0000000000000000      DF *UND*  0000000000000000  ALSA_0.9    snd_ctl_card_info_get_id
0000000000000000      DF *UND*  0000000000000000  PULSE_0     pa_mainloop_get_api
0000000000000000      DF *UND*  0000000000000000  GLIBC_2.2.5 llroundf
0000000000000000      DF *UND*  0000000000000000  ALSA_0.9    snd_pcm_writen
0000000000000000      DF *UND*  0000000000000000  ALSA_0.9    snd_pcm_hw_params_set_format
0000000000000000      DF *UND*  0000000000000000  GLIBC_2.2.5 llround
0000000000000000      DF *UND*  0000000000000000  GLIBC_2.2.5 strncpy
0000000000000000      DF *UND*  0000000000000000  GLIBCXX_3.4 std::__throw_length_error(char const*)
0000000000000000      DF *UND*  0000000000000000  GLIBC_2.2.5 pthread_attr_setschedparam
0000000000000000      DF *UND*  0000000000000000  GLIBCXX_3.4.21 std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >::_M_assign(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&)
0000000000000000      DF *UND*  0000000000000000  ALSA_0.9    snd_pcm_info_set_device
0000000000000000      DF *UND*  0000000000000000              jack_port_by_name
0000000000000000      DF *UND*  0000000000000000  GLIBC_2.2.5 memset
0000000000000000      DF *UND*  0000000000000000  GLIBC_2.2.5 abort
0000000000000000      DF *UND*  0000000000000000  ALSA_0.9    snd_pcm_format_cpu_endian
0000000000000000      DF *UND*  0000000000000000  ALSA_0.9    snd_pcm_drop
0000000000000000      DF *UND*  0000000000000000  ALSA_0.9    snd_pcm_sw_params_set_start_threshold
0000000000000000      DF *UND*  0000000000000000  ALSA_0.9    snd_ctl_open
0000000000000000      DF *UND*  0000000000000000  ALSA_0.9    snd_pcm_sw_params_sizeof
0000000000000000      DF *UND*  0000000000000000  GLIBC_2.2.5 pthread_attr_setscope
0000000000000000      DO *UND*  0000000000000000  GLIBCXX_3.4 vtable for std::basic_streambuf<char, std::char_traits<char> >
0000000000000000      DF *UND*  0000000000000000  ALSA_0.9    snd_pcm_state_name
0000000000000000      DF *UND*  0000000000000000  GLIBC_2.2.5 calloc
0000000000000000      DF *UND*  0000000000000000  GLIBC_2.34  pthread_testcancel
0000000000000000      DF *UND*  0000000000000000              jack_set_process_callback
0000000000000000      DF *UND*  0000000000000000  GLIBCXX_3.4.9 std::ostream& std::ostream::_M_insert<unsigned long>(unsigned long)
0000000000000000      DF *UND*  0000000000000000  GLIBCXX_3.4 std::ostream::flush()
0000000000000000      DF *UND*  0000000000000000  ALSA_0.9    snd_pcm_open
0000000000000000      DO *UND*  0000000000000000  CXXABI_1.3  vtable for __cxxabiv1::__class_type_info
0000000000000000      DF *UND*  0000000000000000  GLIBCXX_3.4 std::__throw_logic_error(char const*)
0000000000000000      DF *UND*  0000000000000000  PULSE_0     pa_context_get_sink_info_list
0000000000000000      DF *UND*  0000000000000000  GLIBC_2.2.5 pthread_mutex_unlock
0000000000000000      DF *UND*  0000000000000000              jack_client_open
0000000000000000      DF *UND*  0000000000000000  GLIBCXX_3.4.29 std::__throw_bad_array_new_length()
0000000000000000      DF *UND*  0000000000000000  ALSA_0.9    snd_strerror
0000000000000000      DF *UND*  0000000000000000  ALSA_0.9    snd_pcm_sw_params_set_silence_size
0000000000000000      DF *UND*  0000000000000000  ALSA_0.9.0rc4 snd_pcm_hw_params_set_period_size_near
0000000000000000      DF *UND*  0000000000000000  PULSE_0     pa_proplist_gets
0000000000000000      DF *UND*  0000000000000000  ALSA_0.9    snd_pcm_sw_params_set_stop_threshold
0000000000000000      DF *UND*  0000000000000000  GLIBC_2.14  memcpy
0000000000000000      DF *UND*  0000000000000000  ALSA_0.9    snd_pcm_writei
0000000000000000      DF *UND*  0000000000000000  ALSA_0.9    snd_pcm_hw_params
0000000000000000      DF *UND*  0000000000000000              jack_get_ports
0000000000000000      DF *UND*  0000000000000000              jack_activate
0000000000000000      DF *UND*  0000000000000000  ALSA_0.9    snd_pcm_info_set_stream
0000000000000000      DF *UND*  0000000000000000  GLIBC_2.2.5 __cxa_atexit
0000000000000000      DF *UND*  0000000000000000  ALSA_0.9    snd_pcm_prepare
0000000000000000      DF *UND*  0000000000000000  GLIBC_2.34  pthread_join
0000000000000000      DF *UND*  0000000000000000  ALSA_0.9    snd_pcm_link
0000000000000000      DF *UND*  0000000000000000  PULSE_0     pa_simple_new
0000000000000000      DF *UND*  0000000000000000              jack_get_buffer_size
0000000000000000      DF *UND*  0000000000000000  GLIBCXX_3.4 operator delete(void*)
0000000000000000      DF *UND*  0000000000000000  GLIBC_2.2.5 sched_get_priority_max
0000000000000000      DO *UND*  0000000000000000  GLIBCXX_3.4.21 vtable for std::__cxx11::basic_ostringstream<char, std::char_traits<char>, std::allocator<char> >
0000000000000000      DF *UND*  0000000000000000  ALSA_0.9.0rc4 snd_pcm_hw_params_set_periods_near
0000000000000000      DF *UND*  0000000000000000  PULSE_0     pa_context_get_server_info
0000000000000000      DF *UND*  0000000000000000  GLIBCXX_3.4 std::basic_ostream<char, std::char_traits<char> >& std::operator<< <std::char_traits<char> >(std::basic_ostream<char, std::char_traits<char> >&, char const*)
0000000000000000      DF *UND*  0000000000000000  ALSA_0.9.0rc4 snd_pcm_hw_params_set_rate_near
0000000000000000      DF *UND*  0000000000000000  GLIBCXX_3.4 operator new(unsigned long)
0000000000000000      DF *UND*  0000000000000000              jack_deactivate
0000000000000000      DO *UND*  0000000000000000  GLIBCXX_3.4.21 VTT for std::__cxx11::basic_ostringstream<char, std::char_traits<char>, std::allocator<char> >
0000000000000000      DF *UND*  0000000000000000              jack_on_shutdown
0000000000000000      DF *UND*  0000000000000000              jack_port_unregister
0000000000000000      DF *UND*  0000000000000000  GLIBCXX_3.4.9 std::basic_ostream<char, std::char_traits<char> >& std::__ostream_insert<char, std::char_traits<char> >(std::basic_ostream<char, std::char_traits<char> >&, char const*, long)
0000000000000000      DF *UND*  0000000000000000  GLIBCXX_3.4.11 std::ctype<char>::_M_widen_init() const
0000000000000000      DF *UND*  0000000000000000  ALSA_0.9    snd_pcm_hw_params_sizeof
0000000000000000      DF *UND*  0000000000000000  GLIBC_2.2.5 pthread_mutex_destroy
0000000000000000      DF *UND*  0000000000000000  ALSA_0.9    snd_pcm_info_get_id
0000000000000000      DF *UND*  0000000000000000  GLIBC_2.2.5 free
0000000000000000      DF *UND*  0000000000000000  GLIBC_2.2.5 pthread_attr_setinheritsched
0000000000000000      DF *UND*  0000000000000000  GLIBC_2.3.2 pthread_cond_init
0000000000000000      DF *UND*  0000000000000000  GLIBC_2.2.5 pthread_attr_init
0000000000000000      DF *UND*  0000000000000000  GLIBCXX_3.4.21 std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >::operator=(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >&&)
0000000000000000      DF *UND*  0000000000000000  ALSA_0.9    snd_pcm_sw_params_get_boundary
0000000000000000      DF *UND*  0000000000000000              jack_set_error_function
0000000000000000      DF *UND*  0000000000000000  GLIBCXX_3.4 std::__throw_bad_cast()
0000000000000000      DF *UND*  0000000000000000  ALSA_0.9    snd_pcm_close
0000000000000000      DF *UND*  0000000000000000  ALSA_0.9    snd_pcm_state
0000000000000000      DO *UND*  0000000000000000  GLIBCXX_3.4 typeinfo for std::bad_alloc
0000000000000000      DO *UND*  0000000000000000  CXXABI_1.3  vtable for __cxxabiv1::__si_class_type_info
0000000000000000      DF *UND*  0000000000000000  ALSA_0.9    snd_pcm_drain
0000000000000000      DF *UND*  0000000000000000  GLIBC_2.2.5 sched_get_priority_min
0000000000000000      DF *UND*  0000000000000000  GLIBCXX_3.4.21 std::__cxx11::basic_stringbuf<char, std::char_traits<char>, std::allocator<char> >::_M_sync(char*, unsigned long, unsigned long)
0000000000000000      DF *UND*  0000000000000000  GLIBCXX_3.4.21 std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >::find(char, unsigned long) const
0000000000000000      DF *UND*  0000000000000000  GLIBC_2.2.5 pthread_attr_setdetachstate
0000000000000000      DF *UND*  0000000000000000  GLIBC_2.2.5 malloc
0000000000000000  w   DF *UND*  0000000000000000              jack_port_get_latency_range
0000000000000000      DF *UND*  0000000000000000  ALSA_0.9    snd_pcm_hw_params_set_channels
0000000000000000      DF *UND*  0000000000000000  GLIBCXX_3.4 std::basic_ios<char, std::char_traits<char> >::init(std::basic_streambuf<char, std::char_traits<char> >*)
0000000000000000      DF *UND*  0000000000000000  ALSA_0.9    snd_pcm_readn
0000000000000000      DF *UND*  0000000000000000  ALSA_0.9    snd_pcm_hw_params_test_rate
0000000000000000      DF *UND*  0000000000000000  ALSA_0.9    snd_ctl_card_info_sizeof
0000000000000000      DF *UND*  0000000000000000  PULSE_0     pa_context_new_with_proplist
0000000000000000      DF *UND*  0000000000000000  GLIBC_2.2.5 pthread_attr_setschedpolicy
0000000000000000      DF *UND*  0000000000000000  GLIBCXX_3.4 std::locale::~locale()
0000000000000000      DF *UND*  0000000000000000  CXXABI_1.3  __cxa_rethrow
0000000000000000      DF *UND*  0000000000000000  GLIBC_2.2.5 pthread_mutex_lock
0000000000000000      DF *UND*  0000000000000000  PULSE_0     pa_simple_read
0000000000000000      DF *UND*  0000000000000000  GLIBC_2.2.5 pthread_mutex_init
0000000000000000      DF *UND*  0000000000000000  ALSA_0.9    snd_card_next
0000000000000000      DF *UND*  0000000000000000  GLIBCXX_3.4.20 std::__throw_out_of_range_fmt(char const*, ...)
0000000000000000      DF *UND*  0000000000000000              jack_port_get_buffer
0000000000000000      DF *UND*  0000000000000000  PULSE_0     pa_mainloop_new
0000000000000000      DF *UND*  0000000000000000  GLIBC_2.3.2 pthread_cond_wait
0000000000000000      DF *UND*  0000000000000000  GLIBCXX_3.4 std::ios_base::Init::Init()
0000000000000000      DF *UND*  0000000000000000  PULSE_0     pa_context_unref
0000000000000000      DF *UND*  0000000000000000  GLIBCXX_3.4.21 std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >::_M_replace(unsigned long, unsigned long, char const*, unsigned long)
0000000000000000      DF *UND*  0000000000000000  PULSE_0     pa_context_get_source_info_list
0000000000000000      DF *UND*  0000000000000000  ALSA_0.9    snd_ctl_close
0000000000000000      DF *UND*  0000000000000000  PULSE_0     pa_simple_write
0000000000000000      DF *UND*  0000000000000000  PULSE_0     pa_context_get_state
0000000000000000      DF *UND*  0000000000000000  GLIBCXX_3.4.21 std::__cxx11::basic_stringbuf<char, std::char_traits<char>, std::allocator<char> >::str() const
0000000000000000      DF *UND*  0000000000000000  ALSA_0.9.0rc4 snd_pcm_hw_params_get_channels_min
0000000000000000      DF *UND*  0000000000000000  GLIBC_2.2.5 snprintf
0000000000000000      DF *UND*  0000000000000000  PULSE_0     pa_mainloop_run
0000000000000000      DF *UND*  0000000000000000  GLIBC_2.2.5 memmove
0000000000000000      DF *UND*  0000000000000000  PULSE_0     pa_simple_free
0000000000000000      DF *UND*  0000000000000000  ALSA_0.9    snd_pcm_info_sizeof
0000000000000000      DF *UND*  0000000000000000  CXXABI_1.3  __cxa_end_catch
0000000000000000      DF *UND*  0000000000000000  PULSE_0     pa_mainloop_free
0000000000000000      DF *UND*  0000000000000000  CXXABI_1.3  __gxx_personality_v0
0000000000000000      DF *UND*  0000000000000000  GLIBC_2.2.5 pthread_attr_destroy
0000000000000000      DF *UND*  0000000000000000  GLIBCXX_3.4 std::basic_ios<char, std::char_traits<char> >::clear(std::_Ios_Iostate)
0000000000000000      DF *UND*  0000000000000000  GLIBCXX_3.4 std::ostream::operator<<(int)
0000000000000000      DF *UND*  0000000000000000  GLIBCXX_3.4.21 std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >::find(char const*, unsigned long, unsigned long) const
0000000000000000      DF *UND*  0000000000000000  PULSE_0     pa_context_set_state_callback
0000000000000000  w   D  *UND*  0000000000000000              _ITM_deregisterTMCloneTable
0000000000000000      DF *UND*  0000000000000000              jack_port_name
0000000000000000      DF *UND*  0000000000000000  GCC_3.0     _Unwind_Resume
0000000000000000      DF *UND*  0000000000000000  GLIBC_2.2.5 pthread_exit
0000000000000000      DF *UND*  0000000000000000  GLIBCXX_3.4.21 std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >::_M_create(unsigned long&, unsigned long)
0000000000000000      DF *UND*  0000000000000000  GLIBCXX_3.4.21 std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >::_M_mutate(unsigned long, unsigned long, char const*, unsigned long)
0000000000000000      DF *UND*  0000000000000000  GLIBC_2.34  pthread_create
0000000000000000      DF *UND*  0000000000000000  ALSA_0.9    snd_pcm_hw_params_any
0000000000000000      DF *UND*  0000000000000000              jack_get_sample_rate
0000000000000000      DF *UND*  0000000000000000  ALSA_0.9    snd_pcm_sw_params_current
0000000000000000  w   D  *UND*  0000000000000000              __gmon_start__
0000000000000000      DF *UND*  0000000000000000  ALSA_0.9    snd_pcm_sw_params
0000000000000000  w   DF *UND*  0000000000000000  CXXABI_1.3  __cxa_pure_virtual
0000000000000000  w   D  *UND*  0000000000000000              _ITM_registerTMCloneTable
0000000000000000      DF *UND*  0000000000000000  GLIBCXX_3.4.21 std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >::assign(char const*)
0000000000000000      DF *UND*  0000000000000000  PULSE_0     pa_context_connect
0000000000000000      DF *UND*  0000000000000000  GLIBC_2.3.2 pthread_cond_destroy
0000000000000000      DF *UND*  0000000000000000  ALSA_0.9    snd_pcm_hw_params_test_format
0000000000000000      DO *UND*  0000000000000000  GLIBCXX_3.4 std::cerr
0000000000000000      DO *UND*  0000000000000000  GLIBCXX_3.4.21 vtable for std::__cxx11::basic_stringbuf<char, std::char_traits<char>, std::allocator<char> >
0000000000000000      DF *UND*  0000000000000000  GLIBCXX_3.4 std::locale::locale()
0000000000000000      DF *UND*  0000000000000000  GLIBCXX_3.4 std::ios_base::Init::~Init()
0000000000010a90 g    DF .text  00000000000001ea  Base        RtApiJack::probeDeviceInfo(RtAudio::DeviceInfo&, _jack_client*)
000000000000c3c0 g    DF .text  00000000000001ec  Base        RtApiAlsa::closeStream()
000000000000c6f0 g    DF .text  00000000000003e9  Base        RtApi::openStream(RtAudio::StreamParameters*, RtAudio::StreamParameters*, unsigned long, unsigned int, unsigned int*, int (*)(void*, void*, unsigned int, double, unsigned int, void*), void*, RtAudio::StreamOptions*)
0000000000009770 g    DF .text  00000000000000b9  Base        RtApi::getDefaultInputDevice()
000000000000be60 g    DF .text  0000000000000129  Base        RtApi::clearStreamInfo()
0000000000009d90 g    DF .text  0000000000000105  Base        RtAudio::getApiDisplayName[abi:cxx11](RtAudio::Api)
000000000000f600 g    DF .text  0000000000000302  Base        RtApi::RtApi()
0000000000021c08  w   DO .data.rel.ro   0000000000000078  Base        vtable for RtApiAlsa
000000000000a100 g    DF .text  0000000000000012  Base        RtApi::~RtApi()
0000000000016850 g    DF .text  00000000000018a5  Base        RtApiAlsa::probeDeviceOpen(unsigned int, RtApi::StreamMode, unsigned int, unsigned int, unsigned int, unsigned long, unsigned int*, RtAudio::StreamOptions*)
0000000000018b90  w   DF .text  0000000000000032  Base        RtApiPulse::PaDeviceInfo::~PaDeviceInfo()
000000000000aee0 g    DF .text  00000000000003dc  Base        RtApiAlsa::stopStream()
0000000000010d70 g    DF .text  00000000000005ad  Base        RtAudio::RtAudio(RtAudio::Api, std::function<void (RtAudioErrorType, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&)>&&)
000000000000a4b0 g    DF .text  00000000000000ef  Base        RtApiJack::stopStream()
0000000000019e50  w   DF .text  0000000000000235  Base        void std::vector<std::pair<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, unsigned int>, std::allocator<std::pair<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, unsigned int> > >::_M_realloc_insert<std::pair<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, unsigned int> >(__gnu_cxx::__normal_iterator<std::pair<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, unsigned int>*, std::vector<std::pair<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, unsigned int>, std::allocator<std::pair<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, unsigned int> > > >, std::pair<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, unsigned int>&&)
0000000000018bd0  w   DF .text  0000000000000055  Base        std::vector<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::allocator<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > > >::~vector()
0000000000018b50  w   DF .text  0000000000000032  Base        std::pair<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > >::~pair()
000000000001a540 g    DF .text  00000000000000ff  Base        rtaudio_get_device_info
0000000000009f60 g    DF .text  0000000000000011  Base        RtAudio::~RtAudio()
00000000000098f0 g    DF .text  0000000000000001  Base        RtApi::closeStream()
0000000000018100 g    DF .text  0000000000000997  Base        RtApiPulse::probeDeviceOpen(unsigned int, RtApi::StreamMode, unsigned int, unsigned int, unsigned int, unsigned long, unsigned int*, RtAudio::StreamOptions*)
0000000000018aa0  w   DF .text  0000000000000003  Base        std::ctype<char>::do_widen(char) const
000000000000f950 g    DF .text  0000000000000041  Base        RtApiJack::RtApiJack()
000000000001a260 g    DF .text  0000000000000008  Base        rtaudio_version
000000000000c370 g    DF .text  0000000000000029  Base        RtApiJack::~RtApiJack()
0000000000018fe0  w   DF .text  0000000000000450  Base        void std::vector<RtAudio::DeviceInfo, std::allocator<RtAudio::DeviceInfo> >::_M_realloc_insert<RtAudio::DeviceInfo const&>(__gnu_cxx::__normal_iterator<RtAudio::DeviceInfo*, std::vector<RtAudio::DeviceInfo, std::allocator<RtAudio::DeviceInfo> > >, RtAudio::DeviceInfo const&)
000000000000c140 g    DF .text  0000000000000223  Base        RtApiJack::closeStream()
000000000000caf0 g    DF .text  000000000000155b  Base        RtApi::convertBuffer(char*, char*, RtApi::ConvertInfo&)
0000000000018ac0  w   DF .text  0000000000000006  Base        RtApiJack::getCurrentApi()
000000000000cae0 g    DF .text  0000000000000008  Base        RtAudio::openStream(RtAudio::StreamParameters*, RtAudio::StreamParameters*, unsigned long, unsigned int, unsigned int*, int (*)(void*, void*, unsigned int, double, unsigned int, void*), void*, RtAudio::StreamOptions*)
000000000000a1c0 g    DF .text  0000000000000012  Base        RtApi::getStreamSampleRate()
000000000000f910 g    DF .text  000000000000003a  Base        RtApiAlsa::RtApiAlsa()
0000000000021c80  w   DO .data.rel.ro   0000000000000078  Base        vtable for RtApiPulse
000000000000c5b0 g    DF .text  000000000000007c  Base        RtApiAlsa::~RtApiAlsa()
0000000000018ae0  w   DF .text  0000000000000006  Base        RtApiPulse::getCurrentApi()
0000000000009830 g    DF .text  00000000000000b9  Base        RtApi::getDefaultOutputDevice()
0000000000019a70  w   DF .text  0000000000000324  Base        void std::vector<std::pair<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > >, std::allocator<std::pair<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > > > >::_M_realloc_insert<std::pair<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > > >(__gnu_cxx::__normal_iterator<std::pair<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > >*, std::vector<std::pair<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > >, std::allocator<std::pair<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > > > > >, std::pair<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > >&&)
0000000000018af0  w   DF .text  0000000000000021  Base        std::_Function_base::~_Function_base()
000000000001a270 g    DF .text  0000000000000008  Base        rtaudio_compiled_api
000000000001a3e0 g    DF .text  0000000000000004  Base        rtaudio_error_type
000000000001d4b8 g    DO .rodata    0000000000000004  Base        RtApi::MAX_SAMPLE_RATES
0000000000021b18  w   DO .data.rel.ro   0000000000000078  Base        vtable for RtApi
000000000000a120 g    DF .text  0000000000000024  Base        RtApi::getDeviceCount()
000000000001aa50 g    DF .text  0000000000000032  Base        rtaudio_get_stream_time
0000000000009ea0 g    DF .text  000000000000005f  Base        RtAudio::getCompiledApiByName(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&)
000000000000a150 g    DF .text  0000000000000033  Base        RtApi::tickStreamTime()
000000000000c090 g    DF .text  000000000000008e  Base        RtApiPulse::~RtApiPulse()
000000000001a2e0 g    DF .text  00000000000000da  Base        rtaudio_compiled_api_by_name
0000000000009910 g    DF .text  0000000000000013  Base        RtApi::setStreamTime(double)
0000000000021b00  w   DO .data.rel.ro   0000000000000018  Base        typeinfo for RtApiPulse
0000000000018c30  w   DF .text  0000000000000157  Base        void std::vector<unsigned int, std::allocator<unsigned int> >::_M_realloc_insert<unsigned int const&>(__gnu_cxx::__normal_iterator<unsigned int*, std::vector<unsigned int, std::allocator<unsigned int> > >, unsigned int const&)
0000000000021ac0  w   DO .data.rel.ro   0000000000000010  Base        typeinfo for RtApi
0000000000018ab0  w   DF .text  0000000000000009  Base        RtApi::getStreamTime() const
000000000000f600 g    DF .text  0000000000000302  Base        RtApi::RtApi()
000000000001a290 g    DF .text  0000000000000023  Base        rtaudio_api_name
000000000000bc70 g    DF .text  00000000000001f0  Base        RtApi::getDeviceInfo(unsigned int)
0000000000009f80 g    DF .text  000000000000017a  Base        RtApi::~RtApi()
000000000000ec10 g    DF .text  000000000000095d  Base        RtApiAlsa::callbackEvent()
000000000001a4e0 g    DF .text  0000000000000052  Base        rtaudio_get_device_id
000000000001d4f0  w   DO .rodata    000000000000000b  Base        typeinfo name for RtApiAlsa
00000000000139f0 g    DF .text  0000000000001b51  Base        RtApiAlsa::probeDevices()
0000000000021ad0  w   DO .data.rel.ro   0000000000000018  Base        typeinfo for RtApiJack
000000000001a9a0 g    DF .text  000000000000000c  Base        rtaudio_close_stream
000000000001a4d0 g    DF .text  000000000000000b  Base        rtaudio_device_count
000000000000b2c0 g    DF .text  00000000000003bc  Base        RtApiAlsa::abortStream()
0000000000019da0  w   DF .text  00000000000000ab  Base        void std::vector<std::pair<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > >, std::allocator<std::pair<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > > > >::emplace_back<std::pair<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > > >(std::pair<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > >&&)
0000000000018bd0  w   DF .text  0000000000000055  Base        std::vector<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::allocator<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > > >::~vector()
000000000000b680 g    DF .text  00000000000002e9  Base        RtApiPulse::stopStream()
0000000000018d90  w   DF .text  0000000000000248  Base        void std::vector<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::allocator<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > > >::_M_realloc_insert<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&>(__gnu_cxx::__normal_iterator<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >*, std::vector<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::allocator<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > > > >, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&)
0000000000010d70 g    DF .text  00000000000005ad  Base        RtAudio::RtAudio(RtAudio::Api, std::function<void (RtAudioErrorType, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&)>&&)
0000000000009f00 g    DF .text  000000000000005f  Base        RtAudio::getCompiledApiByDisplayName(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&)
000000000001a3f0 g    DF .text  000000000000009c  Base        rtaudio_create
000000000001a2c0 g    DF .text  000000000000001f  Base        rtaudio_api_display_name
000000000000aa90 g    DF .text  0000000000000442  Base        RtApiAlsa::startStream()
000000000001a9d0 g    DF .text  000000000000001c  Base        rtaudio_stop_stream
000000000001d464 g    DO .rodata    0000000000000004  Base        rtaudio_num_compiled_apis
000000000001a9f0 g    DF .text  000000000000001c  Base        rtaudio_abort_stream
000000000000c370 g    DF .text  0000000000000029  Base        RtApiJack::~RtApiJack()
000000000000a5a0 g    DF .text  00000000000000b0  Base        RtApiJack::abortStream()
000000000000c650 g    DF .text  0000000000000097  Base        RtApi::formatBytes(unsigned long)
000000000001a280 g    DF .text  000000000000000a  Base        rtaudio_get_num_compiled_apis
000000000001aa30 g    DF .text  0000000000000014  Base        rtaudio_is_stream_running
000000000000a390 g    DF .text  0000000000000113  Base        RtApi::error(RtAudioErrorType)
0000000000019430  w   DF .text  00000000000001d2  Base        std::vector<RtAudio::DeviceInfo, std::allocator<RtAudio::DeviceInfo> >::_M_erase(__gnu_cxx::__normal_iterator<RtAudio::DeviceInfo*, std::vector<RtAudio::DeviceInfo, std::allocator<RtAudio::DeviceInfo> > >)
0000000000009c50 g    DF .text  0000000000000042  Base        RtAudio::getCompiledApi(std::vector<RtAudio::Api, std::allocator<RtAudio::Api> >&)
000000000000bf90 g    DF .text  00000000000000fb  Base        RtApiPulse::closeStream()
000000000001d480 g    DO .rodata    0000000000000038  Base        RtApi::SAMPLE_RATES
000000000001d470 g    DO .rodata    0000000000000010  Base        rtaudio_compiled_apis
000000000000c5b0 g    DF .text  000000000000007c  Base        RtApiAlsa::~RtApiAlsa()
0000000000009c20 g    DF .text  0000000000000022  Base        RtAudio::getVersion[abi:cxx11]()
000000000001a490 g    DF .text  0000000000000022  Base        rtaudio_destroy
000000000000c090 g    DF .text  000000000000008e  Base        RtApiPulse::~RtApiPulse()
000000000000f9a0 g    DF .text  00000000000000ef  Base        RtAudio::openRtApi(RtAudio::Api)
0000000000021b90  w   DO .data.rel.ro   0000000000000078  Base        vtable for RtApiJack
0000000000011d90 g    DF .text  0000000000000e91  Base        RtApiPulse::probeDevices()
0000000000018b20  w   DF .text  000000000000002a  Base        RtAudio::DeviceInfo::~DeviceInfo()
000000000000a720 g    DF .text  000000000000036d  Base        RtApiJack::startStream()
0000000000019610  w   DF .text  00000000000002fc  Base        void std::vector<RtApiPulse::PaDeviceInfo, std::allocator<RtApiPulse::PaDeviceInfo> >::_M_realloc_insert<RtApiPulse::PaDeviceInfo const&>(__gnu_cxx::__normal_iterator<RtApiPulse::PaDeviceInfo*, std::vector<RtApiPulse::PaDeviceInfo, std::allocator<RtApiPulse::PaDeviceInfo> > >, RtApiPulse::PaDeviceInfo const&)
000000000000eae0 g    DF .text  0000000000000121  Base        RtApi::byteSwapBuffer(char*, unsigned int, unsigned long)
000000000001a9b0 g    DF .text  000000000000001c  Base        rtaudio_start_stream
000000000000e050 g    DF .text  00000000000004b7  Base        RtApiJack::callbackEvent(unsigned long)
0000000000019910  w   DF .text  0000000000000157  Base        void std::vector<int, std::allocator<int> >::_M_realloc_insert<int const&>(__gnu_cxx::__normal_iterator<int*, std::vector<int, std::allocator<int> > >, int const&)
0000000000009f80 g    DF .text  000000000000017a  Base        RtApi::~RtApi()
0000000000015550 g    DF .text  00000000000005e4  Base        RtApi::setConvertInfo(RtApi::StreamMode, unsigned int)
0000000000009ca0 g    DF .text  00000000000000e5  Base        RtAudio::getApiName[abi:cxx11](RtAudio::Api)
000000000001aad0 g    DF .text  0000000000000012  Base        rtaudio_get_stream_sample_rate
0000000000018b90  w   DF .text  0000000000000032  Base        RtApiPulse::PaDeviceInfo::~PaDeviceInfo()
000000000000e530 g    DF .text  0000000000000519  Base        RtApiPulse::callbackEvent()
0000000000018b50  w   DF .text  0000000000000032  Base        std::pair<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > >::~pair()
000000000001aaf0 g    DF .text  0000000000000010  Base        rtaudio_show_warnings
0000000000009f60 g    DF .text  0000000000000011  Base        RtAudio::~RtAudio()
00000000000098f0 g    DF .text  0000000000000001  Base        RtApi::probeDevices()
0000000000009900 g    DF .text  0000000000000003  Base        RtApi::probeDeviceOpen(unsigned int, RtApi::StreamMode, unsigned int, unsigned int, unsigned int, unsigned long, unsigned int*, RtAudio::StreamOptions*)
0000000000018ad0  w   DF .text  0000000000000006  Base        RtApiAlsa::getCurrentApi()
000000000000f950 g    DF .text  0000000000000041  Base        RtApiJack::RtApiJack()
000000000001d4d6  w   DO .rodata    0000000000000007  Base        typeinfo name for RtApi
0000000000021ae8  w   DO .data.rel.ro   0000000000000018  Base        typeinfo for RtApiAlsa
000000000001aab0 g    DF .text  0000000000000012  Base        rtaudio_get_stream_latency
000000000001a650 g    DF .text  000000000000000c  Base        rtaudio_get_default_input_device
000000000000c3a0 g    DF .text  0000000000000012  Base        RtApiJack::~RtApiJack()
000000000000a1e0 g    DF .text  00000000000001ab  Base        escapeJackPortRegex(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >&)
0000000000010c80 g    DF .text  00000000000000e6  Base        RtApi::getDeviceNames[abi:cxx11]()
000000000001aa10 g    DF .text  0000000000000014  Base        rtaudio_is_stream_open
000000000001a640 g    DF .text  000000000000000c  Base        rtaudio_get_default_output_device
000000000001d500  w   DO .rodata    000000000000000d  Base        typeinfo name for RtApiPulse
0000000000011320 g    DF .text  0000000000000a6b  Base        RtApiJack::probeDevices()
000000000001aa90 g    DF .text  0000000000000013  Base        rtaudio_set_stream_time
000000000001a660 g    DF .text  000000000000033c  Base        rtaudio_open_stream
000000000000f910 g    DF .text  000000000000003a  Base        RtApiAlsa::RtApiAlsa()
000000000000a190 g    DF .text  000000000000002a  Base        RtApi::getStreamLatency()
000000000000fa90 g    DF .text  0000000000000f11  Base        RtApiAlsa::probeDeviceInfo(RtAudio::DeviceInfo&, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >)
000000000000c630 g    DF .text  0000000000000012  Base        RtApiAlsa::~RtApiAlsa()
000000000001a4c0 g    DF .text  000000000000000c  Base        rtaudio_current_api
000000000000b970 g    DF .text  00000000000002f3  Base        RtApiPulse::abortStream()
000000000001a090  w   DF .text  0000000000000157  Base        void std::vector<int, std::allocator<int> >::_M_realloc_insert<int>(__gnu_cxx::__normal_iterator<int*, std::vector<int, std::allocator<int> > >, int&&)
0000000000018af0  w   DF .text  0000000000000021  Base        std::_Function_base::~_Function_base()
0000000000015b40 g    DF .text  0000000000000d0c  Base        RtApiJack::probeDeviceOpen(unsigned int, RtApi::StreamMode, unsigned int, unsigned int, unsigned int, unsigned long, unsigned int*, RtAudio::StreamOptions*)
0000000000018b20  w   DF .text  000000000000002a  Base        RtAudio::DeviceInfo::~DeviceInfo()
00000000000109b0 g    DF .text  00000000000000d6  Base        RtApi::getDeviceIds()
000000000001d4e0  w   DO .rodata    000000000000000b  Base        typeinfo name for RtApiJack
0000000000022700 g    DO .data  00000000000000a0  Base        rtaudio_api_names
000000000000a650 g    DF .text  00000000000000c7  Base        RtApiPulse::startStream()
000000000001a3c0 g    DF .text  0000000000000013  Base        rtaudio_error
000000000000c120 g    DF .text  0000000000000012  Base        RtApiPulse::~RtApiPulse()
terminator356 commented 1 year ago

Until today I have been using my distro's rtaudio package which is version 5.1.0 So just to be sure, I built and installed rtaudio 5.2.0 This time our app finishes compilation and linking OK.

So definitely version >= 6 is giving me the above stated trouble. Thanks.

garyscavone commented 1 year ago

As far as I know, nothing changed in the build system in going from version 5 to version 6. Do the programs in the tests/ directory compile and link for you?

terminator356 commented 1 year ago

Yes, I just tested the 'playsaw' test. I hear the saw OK.

Strange. I thought that maybe we must grab the RTAUDIO_CFLAGS that cmake passes to us from the package config (.pc) file, and add them to our app's flags. LINUX_ALSA, LINUX_PULSE etc. That did not work. Version 6 still did not allow the app to finish linking. Although with version 5.2.0, it did suddenly make the various APIs in the header file visible. But it seems this step is not really necessary for normal operation.

I am baffled. I tried all day, no luck.

terminator356 commented 1 year ago

Success!

I was forced to remove my distro's rtaudio package! Our app was linking with the wrong library.

This should not happen. User-built versions of software in /usr/local are usually never interfered with by packaged versions in /usr.

I think the problem is version numbering. The packaged version was 5.1.0, and that is what it says in its .pc file. But the actual library files are labelled as 6.0.1 Meanwhile my built 6.0.1 version says 6.0.1 in its .pc file. But the actual library files are labelled as 7.0.0

I think this caused my compiler great confusion. I think it went and looked at the local-built .pc file seeing 6.0.1 but then it actually linked the libraries labelled as 6.0.1 which are part of my distro's package.

I even tried manually typing ldconfig to be sure that the system was pointing to the correct files. In the distant past sometimes this was necessary after a build. But it did not help here.

I hope this experience gives an idea of how to proceed with the numbering scheme. It seems the version numbers in the .pc files should really match what the library file numbering says. Otherwise this is what can end up happening.

Thanks.

ntonnaett commented 1 year ago

The rtaudio.pc.in is using PACKAGE_VERSION and not the soversion. Versioning in CMake and Meson got some attention here. I just tested Meson and it also didn't do the right thing. How did you build rtaudio?

ntonnaett commented 1 year ago

My wording wasn't good. AFAIU the behavior right now is correct. I don't think the lookup of the shared object takes into account that there could be multiple versions installed. Correct me if I'm wrong! To make this work we would need to add the API version to the library name. Instead of rtaudio the dependency would be called rtaudio-6 and the library filename librtaudio-6.so.7.0.0.

https://github.com/pvanhoof/dir-examples

ntonnaett commented 1 year ago

I correct myself. It is too late. I was thinking about the build process. You have version 5.2 and 6.0. Your program depends on 6.0. So you take the pkgconfig file for it. That file doesn't know anything about soversions. It just adds the libdir path with prefix /usr/local. But you probably also link with -l /usr/lib64. So it finds your old version of rtaudio and fails.

Sorry for the spam!