Re: [alsa-devel] [Alsa-devel] Static build of alsa-lib
At Tue, 20 Mar 2007 08:13:41 -0700 (PDT), Ciaccia wrote:
Hi Takashi, It's clear that the concept of dynamic loading doesn't conflict with static library, I think my original question was not completely clear.
I would like to port a sound application (just PCM, no midi or other stuff) to an embedded system. The core of this embedded system is a Cirrus EP9302 ARM processor, which supports hardware floating points.
ARM processors have several ABIs (EABI, OABI, ???) and programs compiled using one ABI are not linkable (neither at compile time, nor at run time) with other binaries, because of the different format. This is a problem for binary distributions (such as Debian), since the same binary does not work on all ARM architectures.
For a reason I really don't understand, EP9302 hardware floating point binaries only work when compiled with -static (don't ask me why...), and therefore I wanted to have a "static" (=without shared libraries) ALSA application. If this would not be possible I can always use OSS (which does not requires shared objects to be loaded at run time), but I still think it should be possible to develop ALSA applications for architectures where dynamic loading is not available...
Is there a way to achieve this?
Sure, what I meant is that the patch had no function to disable the libdl and libpthread explicitly but only checked. The new patch below, for example, can give you options --with-libdl and --with-pthread. For disabling libdl, pass --with-libdl=no.
If this works for you, I'll apply it to the upstream.
Takashi
diff -r 6d0a999aef24 Makefile.am --- a/Makefile.am Fri Mar 16 15:22:27 2007 +0100 +++ b/Makefile.am Tue Mar 20 16:55:23 2007 +0100 @@ -1,4 +1,7 @@ SUBDIRS=doc include src modules -SUBDIRS=doc include src modules +SUBDIRS=doc include src +if BUILD_MODULES +SUBDIRS += modules +endif if BUILD_PCM_PLUGIN_SHM SUBDIRS += aserver endif diff -r 6d0a999aef24 configure.in --- a/configure.in Fri Mar 16 15:22:27 2007 +0100 +++ b/configure.in Tue Mar 20 16:55:00 2007 +0100 @@ -148,6 +148,44 @@ else else AC_MSG_RESULT(no) fi + +ALSA_DEPLIBS="" +if test "$softfloat" != "yes"; then + ALSA_DEPLIBS="-lm" +fi + +dnl Check for libdl +AC_MSG_CHECKING(for libdl) +AC_ARG_WITH(libdl, + [ --with-libdl Use libdl for plugins (default = yes)], + [ have_libdl="$withval" ], [ have_libdl="yes" ]) +if test "$have_libdl" = "yes"; then + AC_CHECK_LIB([dl], [dlsym], [HAVE_LIBDL="yes"]) + if test "$HAVE_LIBDL" = "yes" ; then + ALSA_DEPLIBS="$ALSA_DEPLIBS -ldl" + AC_DEFINE([HAVE_LIBDL], 1, [Have libdl]) + fi +else + AC_MSG_RESULT(no) +fi +AM_CONDITIONAL(BUILD_MODULES, test "$HAVE_LIBDL"="yes") + +dnl Check for pthread +AC_MSG_CHECKING(for pthread) +AC_ARG_WITH(pthread, + [ --with-pthread Use pthread (default = yes)], + [ have_pthread="$withval" ], [ have_pthread="yes" ]) +if test "$have_pthread" = "yes"; then + AC_CHECK_LIB([pthread], [pthread_join], [HAVE_LIBPTHREAD="yes"]) + if test "$HAVE_LIBPTHREAD" = "yes"; then + ALSA_DEPLIBS="$ALSA_DEPLIBS -lpthread" + AC_DEFINE([HAVE_LIBPTHREAD], 1, [Have libpthread]) + fi +else + AC_MSG_RESULT(no) +fi + +AC_SUBST(ALSA_DEPLIBS)
dnl Check for architecture AC_MSG_CHECKING(for architecture) @@ -318,6 +356,21 @@ fi
if test "$build_pcm_ioplug" = "yes"; then build_pcm_extplug="yes" +fi + +if test "$HAVE_LIBDL" != "yes"; then + build_pcm_meter="no" + build_pcm_ladspa="no" + build_pcm_pcm_ioplug="no" + build_pcm_pcm_extplug="no" +fi + +if test "$HAVE_LIBPTHREAD" != "yes"; then + build_pcm_share="no" +fi + +if test "$softfloat" != "yes"; then + build_pcm_lfloat="no" fi
AM_CONDITIONAL(BUILD_PCM_PLUGIN, test x$build_pcm_plugin = xyes) diff -r 6d0a999aef24 include/local.h --- a/include/local.h Fri Mar 16 15:22:27 2007 +0100 +++ b/include/local.h Tue Mar 20 16:16:36 2007 +0100 @@ -36,6 +36,11 @@ #include "config.h" #ifdef SUPPORT_RESMGR #include <resmgr.h> +#endif +#ifdef HAVE_LIBDL +#include <dlfcn.h> +#else +#define RTLD_NOW 0 #endif
#define _snd_config_iterator list_head diff -r 6d0a999aef24 src/Makefile.am --- a/src/Makefile.am Fri Mar 16 15:22:27 2007 +0100 +++ b/src/Makefile.am Tue Mar 20 16:16:36 2007 +0100 @@ -41,7 +41,7 @@ libasound_la_LIBADD += alisp/libalisp.la libasound_la_LIBADD += alisp/libalisp.la endif SUBDIRS += compat conf -libasound_la_LIBADD += compat/libcompat.la -lm -ldl -lpthread +libasound_la_LIBADD += compat/libcompat.la @ALSA_DEPLIBS@
libasound_la_LDFLAGS = -version-info $(COMPATNUM) $(VSYMS)
diff -r 6d0a999aef24 src/async.c --- a/src/async.c Fri Mar 16 15:22:27 2007 +0100 +++ b/src/async.c Tue Mar 20 16:16:36 2007 +0100 @@ -151,9 +151,11 @@ int snd_async_del_handler(snd_async_hand if (!list_empty(&handler->hlist)) goto _end; switch (handler->type) { +#ifdef BUILD_PCM case SND_ASYNC_HANDLER_PCM: err = snd_pcm_async(handler->u.pcm, -1, 1); break; +#endif case SND_ASYNC_HANDLER_CTL: err = snd_ctl_async(handler->u.ctl, -1, 1); break; diff -r 6d0a999aef24 src/conf.c --- a/src/conf.c Fri Mar 16 15:22:27 2007 +0100 +++ b/src/conf.c Tue Mar 20 16:16:36 2007 +0100 @@ -415,12 +415,13 @@ beginning:</P>
#include <stdarg.h> -#include <dlfcn.h> #include <limits.h> #include <sys/stat.h> -#include <pthread.h> #include <locale.h> #include "local.h" +#ifdef HAVE_LIBPTHREAD +#include <pthread.h> +#endif
#ifndef DOC_HIDDEN
@@ -3080,7 +3081,9 @@ int snd_config_update_r(snd_config_t **_ return 1; }
+#ifdef HAVE_LIBPTHREAD static pthread_mutex_t snd_config_update_mutex = PTHREAD_MUTEX_INITIALIZER; +#endif
/** * \brief Updates #snd_config by rereading the global configuration files (if needed). @@ -3099,9 +3102,13 @@ int snd_config_update(void) { int err;
+#ifdef HAVE_LIBPTHREAD pthread_mutex_lock(&snd_config_update_mutex); +#endif err = snd_config_update_r(&snd_config, &snd_config_global_update, NULL); +#ifdef HAVE_LIBPTHREAD pthread_mutex_unlock(&snd_config_update_mutex); +#endif return err; }
@@ -3128,15 +3135,18 @@ int snd_config_update_free(snd_config_up */ int snd_config_update_free_global(void) { +#ifdef HAVE_LIBPTHREAD pthread_mutex_lock(&snd_config_update_mutex); +#endif if (snd_config) snd_config_delete(snd_config); snd_config = NULL; if (snd_config_global_update) snd_config_update_free(snd_config_global_update); snd_config_global_update = NULL; +#ifdef HAVE_LIBPTHREAD pthread_mutex_unlock(&snd_config_update_mutex); - +#endif /* FIXME: better to place this in another place... */ snd_dlobj_cache_cleanup();
diff -r 6d0a999aef24 src/confmisc.c --- a/src/confmisc.c Fri Mar 16 15:22:27 2007 +0100 +++ b/src/confmisc.c Tue Mar 20 16:16:36 2007 +0100 @@ -946,6 +946,8 @@ SND_DLSYM_BUILD_VERSION(snd_func_card_na SND_DLSYM_BUILD_VERSION(snd_func_card_name, SND_CONFIG_DLSYM_VERSION_EVALUATE); #endif
+#ifdef BUILD_PCM + /** * \brief Returns the pcm identification of a device. * \param dst The function puts the handle to the result configuration node @@ -1198,6 +1200,8 @@ int snd_func_private_pcm_subdevice(snd_c #ifndef DOC_HIDDEN SND_DLSYM_BUILD_VERSION(snd_func_private_pcm_subdevice, SND_CONFIG_DLSYM_VERSION_EVALUATE); #endif + +#endif /* BUILD_PCM */
/** * \brief Copies the specified configuration node. diff -r 6d0a999aef24 src/control/control.c --- a/src/control/control.c Fri Mar 16 15:22:27 2007 +0100 +++ b/src/control/control.c Tue Mar 20 16:16:36 2007 +0100 @@ -47,7 +47,6 @@ and IEC958 structure. #include <string.h> #include <fcntl.h> #include <signal.h> -#include <dlfcn.h> #include <sys/poll.h> #include "control_local.h"
diff -r 6d0a999aef24 src/control/hcontrol.c --- a/src/control/hcontrol.c Fri Mar 16 15:22:27 2007 +0100 +++ b/src/control/hcontrol.c Tue Mar 20 16:16:36 2007 +0100 @@ -48,11 +48,13 @@ to reduce overhead accessing the real co #include <string.h> #include <fcntl.h> #include <sys/ioctl.h> -#include <pthread.h> #ifndef DOC_HIDDEN #define __USE_GNU #endif #include "control_local.h" +#ifdef HAVE_LIBPTHREAD +#include <pthread.h> +#endif
#ifndef DOC_HIDDEN #define NOT_FOUND 1000000000 @@ -420,17 +422,22 @@ static void snd_hctl_sort(snd_hctl_t *hc static void snd_hctl_sort(snd_hctl_t *hctl) { unsigned int k; +#ifdef HAVE_LIBPTHREAD static pthread_mutex_t sync_lock = PTHREAD_MUTEX_INITIALIZER; +#endif
assert(hctl); assert(hctl->compare); INIT_LIST_HEAD(&hctl->elems);
+#ifdef HAVE_LIBPTHREAD pthread_mutex_lock(&sync_lock); +#endif compare_hctl = hctl; qsort(hctl->pelems, hctl->count, sizeof(*hctl->pelems), hctl_compare); +#ifdef HAVE_LIBPTHREAD pthread_mutex_unlock(&sync_lock); - +#endif for (k = 0; k < hctl->count; k++) list_add_tail(&hctl->pelems[k]->list, &hctl->elems); } diff -r 6d0a999aef24 src/dlmisc.c --- a/src/dlmisc.c Fri Mar 16 15:22:27 2007 +0100 +++ b/src/dlmisc.c Tue Mar 20 16:51:13 2007 +0100 @@ -28,7 +28,6 @@ */
#define _GNU_SOURCE -#include <dlfcn.h> #include "list.h" #include "local.h"
@@ -53,13 +52,19 @@ void *snd_dlopen(const char *name, int m if (name == NULL) return &snd_dlsym_start; #else +#ifdef HAVE_LIBDL if (name == NULL) { Dl_info dlinfo; if (dladdr(snd_dlopen, &dlinfo) > 0) name = dlinfo.dli_fname; } #endif +#endif +#ifdef HAVE_LIBDL return dlopen(name, mode); +#else + return NULL; +#endif }
/** @@ -76,7 +81,11 @@ int snd_dlclose(void *handle) if (handle == &snd_dlsym_start) return 0; #endif +#ifdef HAVE_LIBDL return dlclose(handle); +#else + return 0; +#endif }
/** @@ -91,6 +100,7 @@ int snd_dlclose(void *handle) */ static int snd_dlsym_verify(void *handle, const char *name, const char *version) { +#ifdef HAVE_LIBDL int res; char *vname; @@ -107,6 +117,9 @@ static int snd_dlsym_verify(void *handle if (res < 0) SNDERR("unable to verify version for symbol %s", name); return res; +#else + return 0; +#endif }
/** @@ -139,10 +152,16 @@ void *snd_dlsym(void *handle, const char return NULL; } #endif - err = snd_dlsym_verify(handle, name, version); - if (err < 0) - return NULL; +#ifdef HAVE_LIBDL + if (version) { + err = snd_dlsym_verify(handle, name, version); + if (err < 0) + return NULL; + } return dlsym(handle, name); +#else + return NULL; +#endif }
/* diff -r 6d0a999aef24 src/hwdep/hwdep.c --- a/src/hwdep/hwdep.c Fri Mar 16 15:22:27 2007 +0100 +++ b/src/hwdep/hwdep.c Tue Mar 20 16:16:36 2007 +0100 @@ -33,7 +33,6 @@ #include <unistd.h> #include <string.h> #include <fcntl.h> -#include <dlfcn.h> #include <sys/ioctl.h> #include "hwdep_local.h"
diff -r 6d0a999aef24 src/mixer/simple_abst.c --- a/src/mixer/simple_abst.c Fri Mar 16 15:22:27 2007 +0100 +++ b/src/mixer/simple_abst.c Tue Mar 20 16:52:35 2007 +0100 @@ -82,14 +82,14 @@ static int try_open(snd_mixer_class_t *c free(xlib); return -ENXIO; } - event_func = dlsym(h, "alsa_mixer_simple_event"); + event_func = snd_dlsym(h, "alsa_mixer_simple_event", NULL); if (event_func == NULL) { SNDERR("Symbol 'alsa_mixer_simple_event' was not found in '%s'", xlib); snd_dlclose(h); free(xlib); return -ENXIO; } - init_func = dlsym(h, "alsa_mixer_simple_init"); + init_func = snd_dlsym(h, "alsa_mixer_simple_init", NULL); if (init_func == NULL) { SNDERR("Symbol 'alsa_mixer_simple_init' was not found in '%s'", xlib); snd_dlclose(h); diff -r 6d0a999aef24 src/pcm/pcm.c --- a/src/pcm/pcm.c Fri Mar 16 15:22:27 2007 +0100 +++ b/src/pcm/pcm.c Tue Mar 20 16:16:36 2007 +0100 @@ -634,7 +634,6 @@ playback devices. #include <malloc.h> #include <stdarg.h> #include <signal.h> -#include <dlfcn.h> #include <sys/poll.h> #include <sys/shm.h> #include <sys/mman.h> diff -r 6d0a999aef24 src/pcm/pcm_hooks.c --- a/src/pcm/pcm_hooks.c Fri Mar 16 15:22:27 2007 +0100 +++ b/src/pcm/pcm_hooks.c Tue Mar 20 16:16:36 2007 +0100 @@ -27,7 +27,6 @@ * */
-#include <dlfcn.h> #include "pcm_local.h" #include "pcm_generic.h"
diff -r 6d0a999aef24 src/pcm/pcm_ladspa.c --- a/src/pcm/pcm_ladspa.c Fri Mar 16 15:22:27 2007 +0100 +++ b/src/pcm/pcm_ladspa.c Tue Mar 20 16:16:36 2007 +0100 @@ -33,7 +33,6 @@ */
#include <dirent.h> -#include <dlfcn.h> #include <locale.h> #include <math.h> #include "pcm_local.h" diff -r 6d0a999aef24 src/pcm/pcm_rate.c --- a/src/pcm/pcm_rate.c Fri Mar 16 15:22:27 2007 +0100 +++ b/src/pcm/pcm_rate.c Tue Mar 20 16:51:41 2007 +0100 @@ -29,7 +29,6 @@ */ #include <inttypes.h> #include <byteswap.h> -#include <dlfcn.h> #include "pcm_local.h" #include "pcm_plugin.h" #include "pcm_rate.h" @@ -1326,7 +1325,7 @@ int snd_pcm_rate_open(snd_pcm_t **pcmp, free(rate); return -ENOENT; } - open_func = dlsym(h, open_name); + open_func = snd_dlsym(h, open_name, NULL); if (! open_func) { SNDERR("Cannot find function %s", open_name); snd_dlclose(h); diff -r 6d0a999aef24 src/rawmidi/rawmidi.c --- a/src/rawmidi/rawmidi.c Fri Mar 16 15:22:27 2007 +0100 +++ b/src/rawmidi/rawmidi.c Tue Mar 20 16:16:36 2007 +0100 @@ -139,7 +139,6 @@ This example shows open and read/write r #include <stdarg.h> #include <unistd.h> #include <string.h> -#include <dlfcn.h> #include "rawmidi_local.h"
/** diff -r 6d0a999aef24 src/seq/seq.c --- a/src/seq/seq.c Fri Mar 16 15:22:27 2007 +0100 +++ b/src/seq/seq.c Tue Mar 20 16:16:36 2007 +0100 @@ -777,7 +777,6 @@ void event_filter(snd_seq_t *seq, snd_se
*/
-#include <dlfcn.h> #include <sys/poll.h> #include "seq_local.h"
diff -r 6d0a999aef24 src/timer/timer.c --- a/src/timer/timer.c Fri Mar 16 15:22:27 2007 +0100 +++ b/src/timer/timer.c Tue Mar 20 16:16:36 2007 +0100 @@ -72,7 +72,6 @@ This example shows opening a timer devic #include <unistd.h> #include <string.h> #include <fcntl.h> -#include <dlfcn.h> #include <signal.h> #include <sys/ioctl.h> #include "timer_local.h" diff -r 6d0a999aef24 src/timer/timer_query.c --- a/src/timer/timer_query.c Fri Mar 16 15:22:27 2007 +0100 +++ b/src/timer/timer_query.c Tue Mar 20 16:16:36 2007 +0100 @@ -31,7 +31,6 @@ #include <unistd.h> #include <string.h> #include <fcntl.h> -#include <dlfcn.h> #include <sys/ioctl.h> #include "timer_local.h"
diff -r 6d0a999aef24 utils/alsa.pc.in --- a/utils/alsa.pc.in Fri Mar 16 15:22:27 2007 +0100 +++ b/utils/alsa.pc.in Tue Mar 20 16:16:36 2007 +0100 @@ -8,7 +8,7 @@ Version: @VERSION@ Version: @VERSION@ Requires: Libs: -L${libdir} -lasound -Libs.private: -lm -ldl -lpthread +Libs.private: @ALSA_DEPLIBS@ # -I${includedir}/alsa below is just for backward compatibility # (it was set so mistakely in the older version) Cflags: -I${includedir} -I${includedir}/alsa
Hi Takashi, I have just tried the patch you provided me. I applied the patch and then I configured alsa-lib as following:
./configure --enable-static --disable-shared --disable-mixer --disable-hwdep --disable-rawmidi --disable-seq --disable-instr --disable-alisp --with-pcm-plugins=no --with-libdl=no --with-pthread=no
The compilation works fine, ant the static library is created. When I try to link my application to it, I get the following warning:
~/alsa $ gcc -Wall -O2 -o test test.c -L/tmp/alsa-lib-hg20070317/src/.libs/ -lasound -static
/tmp/alsa-lib-hg20070317/src/.libs/libasound.a(control_shm.o): In function `_snd_ctl_shm_open': /tmp/alsa-lib-hg20070317/src/control/control_shm.c:664: warning: Using 'gethostbyname' in statically linked applications requires at runtime the shared libraries from the glibc version used for linking
I think we are getting closer, but I could not figure out how to exclude this from the compilation. The file control_shm.c contains only few macro #IFDEFS, and none for it.
Takashi, could you tell me why/when the pthread lib is needed? Do I need it for PCM, or is it used just for MIDI?
Last but not least, the ./configure --help does not give information about the the new switches (--with-libdl=no --with-pthread=no), shouldn't they be visible in the "help" page?
Thanks again, Bye bye
Andrea
--- Takashi Iwai tiwai@suse.de wrote:
At Tue, 20 Mar 2007 08:13:41 -0700 (PDT), Ciaccia wrote:
Hi Takashi, It's clear that the concept of dynamic loading
doesn't
conflict with static library, I think my original question was not completely clear.
I would like to port a sound application (just
PCM, no
midi or other stuff) to an embedded system. The
core
of this embedded system is a Cirrus EP9302 ARM processor, which supports hardware floating
points.
ARM processors have several ABIs (EABI, OABI, ???)
and
programs compiled using one ABI are not linkable (neither at compile time, nor at run time) with
other
binaries, because of the different format. This is
a
problem for binary distributions (such as Debian), since the same binary does not work on all ARM architectures.
For a reason I really don't understand, EP9302 hardware floating point binaries only work when compiled with -static (don't ask me why...), and therefore I wanted to have a "static" (=without
shared
libraries) ALSA application. If this would not be possible I can always use OSS (which does not
requires
shared objects to be loaded at run time), but I
still
think it should be possible to develop ALSA applications for architectures where dynamic
loading
is not available...
Is there a way to achieve this?
Sure, what I meant is that the patch had no function to disable the libdl and libpthread explicitly but only checked. The new patch below, for example, can give you options --with-libdl and --with-pthread. For disabling libdl, pass --with-libdl=no.
If this works for you, I'll apply it to the upstream.
Takashi
diff -r 6d0a999aef24 Makefile.am --- a/Makefile.am Fri Mar 16 15:22:27 2007 +0100 +++ b/Makefile.am Tue Mar 20 16:55:23 2007 +0100 @@ -1,4 +1,7 @@ SUBDIRS=doc include src modules -SUBDIRS=doc include src modules +SUBDIRS=doc include src +if BUILD_MODULES +SUBDIRS += modules +endif if BUILD_PCM_PLUGIN_SHM SUBDIRS += aserver endif diff -r 6d0a999aef24 configure.in --- a/configure.in Fri Mar 16 15:22:27 2007 +0100 +++ b/configure.in Tue Mar 20 16:55:00 2007 +0100 @@ -148,6 +148,44 @@ else else AC_MSG_RESULT(no) fi
+ALSA_DEPLIBS="" +if test "$softfloat" != "yes"; then
- ALSA_DEPLIBS="-lm"
+fi
+dnl Check for libdl +AC_MSG_CHECKING(for libdl) +AC_ARG_WITH(libdl,
- [ --with-libdl Use libdl for plugins
(default = yes)],
- [ have_libdl="$withval" ], [ have_libdl="yes" ])
+if test "$have_libdl" = "yes"; then
- AC_CHECK_LIB([dl], [dlsym], [HAVE_LIBDL="yes"])
- if test "$HAVE_LIBDL" = "yes" ; then
- ALSA_DEPLIBS="$ALSA_DEPLIBS -ldl"
- AC_DEFINE([HAVE_LIBDL], 1, [Have libdl])
- fi
+else
- AC_MSG_RESULT(no)
+fi +AM_CONDITIONAL(BUILD_MODULES, test "$HAVE_LIBDL"="yes")
+dnl Check for pthread +AC_MSG_CHECKING(for pthread) +AC_ARG_WITH(pthread,
- [ --with-pthread Use pthread (default =
yes)],
- [ have_pthread="$withval" ], [ have_pthread="yes"
]) +if test "$have_pthread" = "yes"; then
- AC_CHECK_LIB([pthread], [pthread_join],
[HAVE_LIBPTHREAD="yes"])
- if test "$HAVE_LIBPTHREAD" = "yes"; then
- ALSA_DEPLIBS="$ALSA_DEPLIBS -lpthread"
- AC_DEFINE([HAVE_LIBPTHREAD], 1, [Have
libpthread])
- fi
+else
- AC_MSG_RESULT(no)
+fi
+AC_SUBST(ALSA_DEPLIBS)
dnl Check for architecture AC_MSG_CHECKING(for architecture) @@ -318,6 +356,21 @@ fi
if test "$build_pcm_ioplug" = "yes"; then build_pcm_extplug="yes" +fi
+if test "$HAVE_LIBDL" != "yes"; then
- build_pcm_meter="no"
- build_pcm_ladspa="no"
- build_pcm_pcm_ioplug="no"
- build_pcm_pcm_extplug="no"
+fi
+if test "$HAVE_LIBPTHREAD" != "yes"; then
- build_pcm_share="no"
+fi
+if test "$softfloat" != "yes"; then
- build_pcm_lfloat="no"
fi
AM_CONDITIONAL(BUILD_PCM_PLUGIN, test x$build_pcm_plugin = xyes) diff -r 6d0a999aef24 include/local.h --- a/include/local.h Fri Mar 16 15:22:27 2007 +0100 +++ b/include/local.h Tue Mar 20 16:16:36 2007 +0100 @@ -36,6 +36,11 @@ #include "config.h" #ifdef SUPPORT_RESMGR #include <resmgr.h> +#endif +#ifdef HAVE_LIBDL +#include <dlfcn.h> +#else +#define RTLD_NOW 0 #endif
#define _snd_config_iterator list_head diff -r 6d0a999aef24 src/Makefile.am --- a/src/Makefile.am Fri Mar 16 15:22:27 2007 +0100 +++ b/src/Makefile.am Tue Mar 20 16:16:36 2007 +0100 @@ -41,7 +41,7 @@ libasound_la_LIBADD += alisp/libalisp.la libasound_la_LIBADD += alisp/libalisp.la endif SUBDIRS += compat conf -libasound_la_LIBADD += compat/libcompat.la -lm -ldl -lpthread +libasound_la_LIBADD += compat/libcompat.la @ALSA_DEPLIBS@
libasound_la_LDFLAGS = -version-info $(COMPATNUM) $(VSYMS)
diff -r 6d0a999aef24 src/async.c --- a/src/async.c Fri Mar 16 15:22:27 2007 +0100 +++ b/src/async.c Tue Mar 20 16:16:36 2007 +0100 @@ -151,9 +151,11 @@ int snd_async_del_handler(snd_async_hand if (!list_empty(&handler->hlist)) goto _end; switch (handler->type) { +#ifdef BUILD_PCM case SND_ASYNC_HANDLER_PCM: err = snd_pcm_async(handler->u.pcm, -1, 1); break; +#endif case SND_ASYNC_HANDLER_CTL: err = snd_ctl_async(handler->u.ctl, -1, 1); break; diff -r 6d0a999aef24 src/conf.c --- a/src/conf.c Fri Mar 16 15:22:27 2007 +0100 +++ b/src/conf.c Tue Mar 20 16:16:36 2007 +0100 @@ -415,12 +415,13 @@ beginning:</P>
=== message truncated ===
____________________________________________________________________________________ Bored stiff? Loosen up... Download and play hundreds of games for free on Yahoo! Games. http://games.yahoo.com/games/front
At Wed, 21 Mar 2007 12:00:23 -0700 (PDT), Ciaccia wrote:
Hi Takashi, I have just tried the patch you provided me. I applied the patch and then I configured alsa-lib as following:
./configure --enable-static --disable-shared --disable-mixer --disable-hwdep --disable-rawmidi --disable-seq --disable-instr --disable-alisp --with-pcm-plugins=no --with-libdl=no --with-pthread=no
The compilation works fine, ant the static library is created. When I try to link my application to it, I get the following warning:
~/alsa $ gcc -Wall -O2 -o test test.c -L/tmp/alsa-lib-hg20070317/src/.libs/ -lasound -static
/tmp/alsa-lib-hg20070317/src/.libs/libasound.a(control_shm.o): In function `_snd_ctl_shm_open': /tmp/alsa-lib-hg20070317/src/control/control_shm.c:664: warning: Using 'gethostbyname' in statically linked applications requires at runtime the shared libraries from the glibc version used for linking
This is actually a glibc issue. You don't care about it at all. (control_shm is very unlikely used, so it can be trimmed down in the future version.)
I think we are getting closer, but I could not figure out how to exclude this from the compilation. The file control_shm.c contains only few macro #IFDEFS, and none for it.
Takashi, could you tell me why/when the pthread lib is needed? Do I need it for PCM, or is it used just for MIDI?
Usually the places where any race may happen. The library itself doesn't use mutli-threading at all.
Last but not least, the ./configure --help does not give information about the the new switches (--with-libdl=no --with-pthread=no), shouldn't they be visible in the "help" page?
They should. At least, it's shown on my ststem correctly.
Takashi
At Thu, 22 Mar 2007 00:45:23 +0100, I wrote:
At Wed, 21 Mar 2007 12:00:23 -0700 (PDT), Ciaccia wrote:
Hi Takashi, I have just tried the patch you provided me. I applied the patch and then I configured alsa-lib as following:
./configure --enable-static --disable-shared --disable-mixer --disable-hwdep --disable-rawmidi --disable-seq --disable-instr --disable-alisp --with-pcm-plugins=no --with-libdl=no --with-pthread=no
The compilation works fine, ant the static library is created. When I try to link my application to it, I get the following warning:
~/alsa $ gcc -Wall -O2 -o test test.c -L/tmp/alsa-lib-hg20070317/src/.libs/ -lasound -static
/tmp/alsa-lib-hg20070317/src/.libs/libasound.a(control_shm.o): In function `_snd_ctl_shm_open': /tmp/alsa-lib-hg20070317/src/control/control_shm.c:664: warning: Using 'gethostbyname' in statically linked applications requires at runtime the shared libraries from the glibc version used for linking
This is actually a glibc issue. You don't care about it at all. (control_shm is very unlikely used, so it can be trimmed down in the future version.)
FYI, I applied this patch to ALSA HG tree right now.
Takashi
participants (2)
-
Ciaccia
-
Takashi Iwai