mirror of
https://github.com/mackron/miniaudio.git
synced 2026-04-21 15:56:58 +02:00
ALSA: Fix undefined symbols during static compilation
These were undefined when linking with the -static flag on:
1. Alpine Linux v3.21 x86_64
2. Debian GNU/Linux 12 (bookworm) aarch64
In both cases I had to manually compile alsa-lib as a static library
because the systems have only .so versions. I did it with:
cd path/to/alsa-libs
./gitcompile static
<this will create alsa-libs/src/.libs/libasound.a>
Tested with alsa-libs 1.12.2 and 1.12.3.
It's possible to reproduce the errors like this:
clang -static -DMA_NO_RUNTIME_LINKING -DMA_ENABLE_ONLY_SPECIFIC_BACKENDS -DMA_ENABLE_ALSA -DMA_DEBUG_OUTPUT -Wall -Wextra -g3 simple_playback_sine.c -o build/miniwave -fcolor-diagnostics -ferror-limit=2 -fuse-ld=lld -I../
-L/home/antharas/code/alsa-lib/src/.libs/ -lasound
However, even though it compiles I can't verify that everything works.
1. Alpine has musl which doesn't support runtime linking when
compiling with -static. So even though I disabled it for
miniaudio.h, libasound.a itself uses dlopen on
libasound_module_pcm_pipewire.so.
2. Debian uses glibc so it supports it but fails because my machine is
a VPS that doesn't have a soundcard.
No big deal, I don't really need to statically link, it was just
something I stumbled upon.
Also these are currently unused:
_snd_pcm_hw_params_set_rate_minmax
ma_timer_init
ma_timer_get_time_in_seconds
ma_device__on_notification_rerouted
This commit is contained in:
+9
-4
@@ -26688,6 +26688,9 @@ typedef snd_pcm_channel_area_t ma_snd_pcm_channel_area_t;
|
||||
typedef snd_pcm_chmap_t ma_snd_pcm_chmap_t;
|
||||
typedef snd_pcm_state_t ma_snd_pcm_state_t;
|
||||
|
||||
/* snd_pcm_state_t */
|
||||
#define MA_SND_PCM_STATE_XRUN SND_PCM_STATE_XRUN
|
||||
|
||||
/* snd_pcm_stream_t */
|
||||
#define MA_SND_PCM_STREAM_PLAYBACK SND_PCM_STREAM_PLAYBACK
|
||||
#define MA_SND_PCM_STREAM_CAPTURE SND_PCM_STREAM_CAPTURE
|
||||
@@ -26883,6 +26886,7 @@ typedef int (* ma_snd_pcm_hw_params_set_channels_minmax_proc) (
|
||||
typedef int (* ma_snd_pcm_hw_params_set_rate_resample_proc) (ma_snd_pcm_t *pcm, ma_snd_pcm_hw_params_t *params, unsigned int val);
|
||||
typedef int (* ma_snd_pcm_hw_params_set_rate_proc) (ma_snd_pcm_t *pcm, ma_snd_pcm_hw_params_t *params, unsigned int val, int dir);
|
||||
typedef int (* ma_snd_pcm_hw_params_set_rate_near_proc) (ma_snd_pcm_t *pcm, ma_snd_pcm_hw_params_t *params, unsigned int *val, int *dir);
|
||||
typedef int (* ma_snd_pcm_hw_params_set_rate_minmax_proc) (ma_snd_pcm_t *pcm, ma_snd_pcm_hw_params_t *params, unsigned int *min, int *mindir, unsigned int *max, int *maxdir);
|
||||
typedef int (* ma_snd_pcm_hw_params_set_buffer_size_near_proc)(ma_snd_pcm_t *pcm, ma_snd_pcm_hw_params_t *params, ma_snd_pcm_uframes_t *val);
|
||||
typedef int (* ma_snd_pcm_hw_params_set_periods_near_proc) (ma_snd_pcm_t *pcm, ma_snd_pcm_hw_params_t *params, unsigned int *val, int *dir);
|
||||
typedef int (* ma_snd_pcm_hw_params_set_access_proc) (ma_snd_pcm_t *pcm, ma_snd_pcm_hw_params_t *params, ma_snd_pcm_access_t _access);
|
||||
@@ -28649,8 +28653,9 @@ static ma_result ma_context_init__alsa(ma_context* pContext, const ma_context_co
|
||||
ma_snd_pcm_hw_params_get_format_mask_proc _snd_pcm_hw_params_get_format_mask = snd_pcm_hw_params_get_format_mask;
|
||||
ma_snd_pcm_hw_params_set_channels_proc _snd_pcm_hw_params_set_channels = snd_pcm_hw_params_set_channels;
|
||||
ma_snd_pcm_hw_params_set_channels_near_proc _snd_pcm_hw_params_set_channels_near = snd_pcm_hw_params_set_channels_near;
|
||||
ma_snd_pcm_hw_params_set_channels_minmax_proc _snd_pcm_hw_params_set_channels_minmax = snd_pcm_hw_params_set_channels_minmax;
|
||||
ma_snd_pcm_hw_params_set_rate_resample_proc _snd_pcm_hw_params_set_rate_resample = snd_pcm_hw_params_set_rate_resample;
|
||||
ma_snd_pcm_hw_params_set_rate_near _snd_pcm_hw_params_set_rate = snd_pcm_hw_params_set_rate;
|
||||
ma_snd_pcm_hw_params_set_rate_proc _snd_pcm_hw_params_set_rate = snd_pcm_hw_params_set_rate;
|
||||
ma_snd_pcm_hw_params_set_rate_near_proc _snd_pcm_hw_params_set_rate_near = snd_pcm_hw_params_set_rate_near;
|
||||
ma_snd_pcm_hw_params_set_rate_minmax_proc _snd_pcm_hw_params_set_rate_minmax = snd_pcm_hw_params_set_rate_minmax;
|
||||
ma_snd_pcm_hw_params_set_buffer_size_near_proc _snd_pcm_hw_params_set_buffer_size_near = snd_pcm_hw_params_set_buffer_size_near;
|
||||
@@ -28702,9 +28707,9 @@ static ma_result ma_context_init__alsa(ma_context* pContext, const ma_context_co
|
||||
ma_snd_pcm_info_proc _snd_pcm_info = snd_pcm_info;
|
||||
ma_snd_pcm_info_sizeof_proc _snd_pcm_info_sizeof = snd_pcm_info_sizeof;
|
||||
ma_snd_pcm_info_get_name_proc _snd_pcm_info_get_name = snd_pcm_info_get_name;
|
||||
ma_snd_pcm_poll_descriptors _snd_pcm_poll_descriptors = snd_pcm_poll_descriptors;
|
||||
ma_snd_pcm_poll_descriptors_count _snd_pcm_poll_descriptors_count = snd_pcm_poll_descriptors_count;
|
||||
ma_snd_pcm_poll_descriptors_revents _snd_pcm_poll_descriptors_revents = snd_pcm_poll_descriptors_revents;
|
||||
ma_snd_pcm_poll_descriptors_proc _snd_pcm_poll_descriptors = snd_pcm_poll_descriptors;
|
||||
ma_snd_pcm_poll_descriptors_count_proc _snd_pcm_poll_descriptors_count = snd_pcm_poll_descriptors_count;
|
||||
ma_snd_pcm_poll_descriptors_revents_proc _snd_pcm_poll_descriptors_revents = snd_pcm_poll_descriptors_revents;
|
||||
ma_snd_config_update_free_global_proc _snd_config_update_free_global = snd_config_update_free_global;
|
||||
|
||||
pContext->alsa.snd_pcm_open = (ma_proc)_snd_pcm_open;
|
||||
|
||||
Reference in New Issue
Block a user