* Static build of alsa-lib @ 2007-03-16 13:17 Ciaccia 2007-03-16 14:18 ` Takashi Iwai 0 siblings, 1 reply; 11+ messages in thread From: Ciaccia @ 2007-03-16 13:17 UTC (permalink / raw) To: alsa-devel Hi there, I would like to compile an alsa application for an embedded system with no shared-libraries support. My application just needs PCM, with no plug-ins, no mixer and no midi and the application should be a standalone executable with no external dependencies, otherwise it will not work. I tried to compile alsa-lib with static support, but without luck (-ldl is always needed in the gcc line and gcc always prints some weird warnings). Since I don't need external plugins nor ladspa, I think there should be a way to compile an application in a 100% static manner, but I still have to figure out how. I also found this thread with a similar problem with uClinux http://www.mail-archive.com/alsa-user@lists.sourceforge.net/msg18253.html but at the end I did not understand how/if the problem was solved. Do you think it should be possible to compile alsa-lib with no dependencies on dl? How? Otherwise, would it be possible to write an alsa application that does not rely on alsa-lib (i.e., by using the alsa kernel APIs directly)? Has someone already tried it? Some hints? Every hint is extremely welcome Thanks a lot Best regards Andrea ____________________________________________________________________________________ Food fight? Enjoy some healthy debate in the Yahoo! Answers Food & Drink Q&A. http://answers.yahoo.com/dir/?link=list&sid=396545367 ------------------------------------------------------------------------- Take Surveys. Earn Cash. Influence the Future of IT Join SourceForge.net's Techsay panel and you'll get the chance to share your opinions on IT & business topics through brief surveys-and earn cash http://www.techsay.com/default.php?page=join.php&p=sourceforge&CID=DEVDEV ^ permalink raw reply [flat|nested] 11+ messages in thread
* Re: Static build of alsa-lib 2007-03-16 13:17 Static build of alsa-lib Ciaccia @ 2007-03-16 14:18 ` Takashi Iwai 2007-03-16 14:24 ` Takashi Iwai 2007-03-17 10:13 ` Ciaccia 0 siblings, 2 replies; 11+ messages in thread From: Takashi Iwai @ 2007-03-16 14:18 UTC (permalink / raw) To: Ciaccia; +Cc: alsa-devel At Fri, 16 Mar 2007 06:17:00 -0700 (PDT), Ciaccia wrote: > > Hi there, > I would like to compile an alsa application for an > embedded system with no shared-libraries support. My > application just needs PCM, with no plug-ins, no mixer > and no midi and the application should be a standalone > executable with no external dependencies, otherwise it > will not work. > > I tried to compile alsa-lib with static support, but > without luck (-ldl is always needed in the gcc line > and gcc always prints some weird warnings). Since I > don't need external plugins nor ladspa, I think there > should be a way to compile an application in a 100% > static manner, but I still have to figure out how. > > I also found this thread with a similar problem with > uClinux > http://www.mail-archive.com/alsa-user@lists.sourceforge.net/msg18253.html > but at the end I did not understand how/if the problem > was solved. > > Do you think it should be possible to compile alsa-lib > with no dependencies on dl? How? > > Otherwise, would it be possible to write an alsa > application that does not rely on alsa-lib (i.e., > by using the alsa kernel APIs directly)? Has someone > already tried it? Some hints? > > Every hint is extremely welcome I worked on this sometime ago, and made a patch to build alsa-lib without pthread and libdl. I don't remember why this wasn't applied. IIRC, ulibc has the wrappers for pthread and libdl, so this wasn't needed at that time in the end. Otherwise, it should work. Build with --enable-static --disable-shared, --disble-mixer, --disable-hwdep, etc. Takashi diff -r f1203eb7eb48 configure.in --- a/configure.in Tue Mar 13 10:44:28 2007 +0100 +++ b/configure.in Fri Mar 16 15:07:51 2007 +0100 @@ -148,6 +148,23 @@ else else AC_MSG_RESULT(no) fi + +AC_CHECK_LIB([dl], [dlsym], [HAVE_LIBDL="yes"]) +AC_CHECK_LIB([pthread], [pthread_join], [HAVE_LIBPTHREAD="yes"]) + +ALSA_DEPLIBS="" +if test "$softfloat" != "yes"; then + ALSA_DEPLIBS="-lm" +fi +if test "$HAVE_LIBDL" = "yes"; then + ALSA_DEPLIBS="$ALSA_DEPLIBS -ldl" + AC_DEFINE([HAVE_LIBDL], 1, [Have libdl]) +fi +if test "$HAVE_LIBPTHREAD" = "yes"; then + ALSA_DEPLIBS="$ALSA_DEPLIBS -lpthread" + AC_DEFINE([HAVE_LIBPTHREAD], 1, [Have libpthread]) +fi +AC_SUBST(ALSA_DEPLIBS) dnl Check for architecture AC_MSG_CHECKING(for architecture) diff -r f1203eb7eb48 include/local.h --- a/include/local.h Tue Mar 13 10:44:28 2007 +0100 +++ b/include/local.h Fri Mar 16 15:07:51 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 f1203eb7eb48 src/Makefile.am --- a/src/Makefile.am Tue Mar 13 10:44:28 2007 +0100 +++ b/src/Makefile.am Fri Mar 16 15:07:51 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 f1203eb7eb48 src/async.c --- a/src/async.c Tue Mar 13 10:44:28 2007 +0100 +++ b/src/async.c Fri Mar 16 15:07:51 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 f1203eb7eb48 src/conf.c --- a/src/conf.c Tue Mar 13 10:44:28 2007 +0100 +++ b/src/conf.c Fri Mar 16 15:07:51 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 f1203eb7eb48 src/confmisc.c --- a/src/confmisc.c Tue Mar 13 10:44:28 2007 +0100 +++ b/src/confmisc.c Fri Mar 16 15:07:51 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 f1203eb7eb48 src/control/control.c --- a/src/control/control.c Tue Mar 13 10:44:28 2007 +0100 +++ b/src/control/control.c Fri Mar 16 15:07:51 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 f1203eb7eb48 src/control/hcontrol.c --- a/src/control/hcontrol.c Tue Mar 13 10:44:28 2007 +0100 +++ b/src/control/hcontrol.c Fri Mar 16 15:07:51 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 f1203eb7eb48 src/dlmisc.c --- a/src/dlmisc.c Tue Mar 13 10:44:28 2007 +0100 +++ b/src/dlmisc.c Fri Mar 16 15:07:51 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,14 @@ void *snd_dlsym(void *handle, const char return NULL; } #endif +#ifdef HAVE_LIBDL err = snd_dlsym_verify(handle, name, version); if (err < 0) return NULL; return dlsym(handle, name); +#else + return NULL; +#endif } /* diff -r f1203eb7eb48 src/hwdep/hwdep.c --- a/src/hwdep/hwdep.c Tue Mar 13 10:44:28 2007 +0100 +++ b/src/hwdep/hwdep.c Fri Mar 16 15:07:52 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 f1203eb7eb48 src/pcm/pcm.c --- a/src/pcm/pcm.c Tue Mar 13 10:44:28 2007 +0100 +++ b/src/pcm/pcm.c Fri Mar 16 15:07:52 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 f1203eb7eb48 src/pcm/pcm_hooks.c --- a/src/pcm/pcm_hooks.c Tue Mar 13 10:44:28 2007 +0100 +++ b/src/pcm/pcm_hooks.c Fri Mar 16 15:07:52 2007 +0100 @@ -27,7 +27,6 @@ * */ -#include <dlfcn.h> #include "pcm_local.h" #include "pcm_generic.h" diff -r f1203eb7eb48 src/pcm/pcm_ladspa.c --- a/src/pcm/pcm_ladspa.c Tue Mar 13 10:44:28 2007 +0100 +++ b/src/pcm/pcm_ladspa.c Fri Mar 16 15:07:52 2007 +0100 @@ -33,7 +33,6 @@ */ #include <dirent.h> -#include <dlfcn.h> #include <locale.h> #include <math.h> #include "pcm_local.h" diff -r f1203eb7eb48 src/pcm/pcm_meter.c --- a/src/pcm/pcm_meter.c Tue Mar 13 10:44:28 2007 +0100 +++ b/src/pcm/pcm_meter.c Fri Mar 16 15:07:52 2007 +0100 @@ -29,11 +29,12 @@ #include <byteswap.h> #include <time.h> -#include <pthread.h> -#include <dlfcn.h> #include "pcm_local.h" #include "pcm_plugin.h" #include "iatomic.h" +#ifdef HAVE_LIBPTHREAD +#include <pthread.h> +#endif #ifndef PIC /* entry for static linking */ @@ -42,6 +43,20 @@ const char *_snd_module_pcm_meter = ""; #ifndef DOC_HIDDEN #define FREQUENCY 50 + +#ifndef HAVE_LIBPTHREAD +#define pthread_mutex_trylock(x) 1 +#define pthread_mutex_lock(x) +#define pthread_mutex_unlock(x) +#define pthread_mutex_init(x, y) +#define pthread_mutex_destroy(x) +#define pthread_cond_init(x, y) +#define pthread_cond_destroy(x) +#define pthread_cond_wait(x, y) +#define pthread_cond_signal(x) +#define pthread_create(a, b, c, d) +#define pthread_join(a, b) +#endif struct _snd_pcm_scope { int enabled; @@ -62,10 +77,12 @@ typedef struct _snd_pcm_meter { int closed; int running; atomic_t reset; +#ifdef HAVE_LIBPTHREAD pthread_t thread; pthread_mutex_t update_mutex; pthread_mutex_t running_mutex; pthread_cond_t running_cond; +#endif struct timespec delay; void *dl_handle; } snd_pcm_meter_t; diff -r f1203eb7eb48 src/pcm/pcm_rate.c --- a/src/pcm/pcm_rate.c Tue Mar 13 10:44:28 2007 +0100 +++ b/src/pcm/pcm_rate.c Fri Mar 16 15:07:52 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" diff -r f1203eb7eb48 src/pcm/pcm_share.c --- a/src/pcm/pcm_share.c Tue Mar 13 10:44:28 2007 +0100 +++ b/src/pcm/pcm_share.c Fri Mar 16 15:07:52 2007 +0100 @@ -36,8 +36,10 @@ #include <sys/socket.h> #include <sys/poll.h> #include <sys/shm.h> +#include "pcm_local.h" +#ifdef HAVE_LIBPTHREAD #include <pthread.h> -#include "pcm_local.h" +#endif #ifndef PIC /* entry for static linking */ @@ -47,8 +49,11 @@ const char *_snd_module_pcm_share = ""; #ifndef DOC_HIDDEN static LIST_HEAD(snd_pcm_share_slaves); +#ifdef HAVE_LIBPTHREAD static pthread_mutex_t snd_pcm_share_slaves_mutex = PTHREAD_MUTEX_INITIALIZER; - +#endif + +#ifdef HAVE_LIBPTHREAD #ifdef MUTEX_DEBUG #define Pthread_mutex_lock(mutex) \ char *snd_pcm_share_slaves_mutex_holder; @@ -71,6 +76,18 @@ do { \ #define Pthread_mutex_lock(mutex) pthread_mutex_lock(mutex) #define Pthread_mutex_unlock(mutex) pthread_mutex_unlock(mutex) #endif +#else /* !HAVE_LIBPTHREAD */ +#define Pthread_mutex_lock(mutex) +#define Pthread_mutex_unlock(mutex) +#define pthread_create(a, b, c, d) +#define pthread_join(a, b) +#define pthread_mutex_init(a, b) +#define pthread_mutex_destroy(a) +#define pthread_cond_init(a, b) +#define pthread_cond_destroy(a) +#define pthread_cond_wait(a, b) +#define pthread_cond_signal(a) +#endif /* HAVE_LIBPTHREAD */ typedef struct { struct list_head clients; @@ -91,12 +108,14 @@ typedef struct { snd_pcm_uframes_t hw_ptr; int poll[2]; int polling; +#ifdef HAVE_LIBPTHREAD pthread_t thread; pthread_mutex_t mutex; #ifdef MUTEX_DEBUG char *mutex_holder; #endif pthread_cond_t poll_cond; +#endif } snd_pcm_share_slave_t; typedef struct { diff -r f1203eb7eb48 src/rawmidi/rawmidi.c --- a/src/rawmidi/rawmidi.c Tue Mar 13 10:44:28 2007 +0100 +++ b/src/rawmidi/rawmidi.c Fri Mar 16 15:07:52 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 f1203eb7eb48 src/seq/seq.c --- a/src/seq/seq.c Tue Mar 13 10:44:28 2007 +0100 +++ b/src/seq/seq.c Fri Mar 16 15:07:52 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 f1203eb7eb48 src/timer/timer.c --- a/src/timer/timer.c Tue Mar 13 10:44:28 2007 +0100 +++ b/src/timer/timer.c Fri Mar 16 15:07:52 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 f1203eb7eb48 src/timer/timer_query.c --- a/src/timer/timer_query.c Tue Mar 13 10:44:28 2007 +0100 +++ b/src/timer/timer_query.c Fri Mar 16 15:07:52 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 f1203eb7eb48 utils/alsa.pc.in --- a/utils/alsa.pc.in Tue Mar 13 10:44:28 2007 +0100 +++ b/utils/alsa.pc.in Fri Mar 16 15:07:52 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 ------------------------------------------------------------------------- Take Surveys. Earn Cash. Influence the Future of IT Join SourceForge.net's Techsay panel and you'll get the chance to share your opinions on IT & business topics through brief surveys-and earn cash http://www.techsay.com/default.php?page=join.php&p=sourceforge&CID=DEVDEV ^ permalink raw reply [flat|nested] 11+ messages in thread
* Re: Static build of alsa-lib 2007-03-16 14:18 ` Takashi Iwai @ 2007-03-16 14:24 ` Takashi Iwai 2007-03-16 15:11 ` Ciaccia 2007-03-17 10:13 ` Ciaccia 1 sibling, 1 reply; 11+ messages in thread From: Takashi Iwai @ 2007-03-16 14:24 UTC (permalink / raw) To: Ciaccia; +Cc: alsa-devel At Fri, 16 Mar 2007 15:18:04 +0100, I wrote: > > At Fri, 16 Mar 2007 06:17:00 -0700 (PDT), > Ciaccia wrote: > > > > Hi there, > > I would like to compile an alsa application for an > > embedded system with no shared-libraries support. My > > application just needs PCM, with no plug-ins, no mixer > > and no midi and the application should be a standalone > > executable with no external dependencies, otherwise it > > will not work. > > > > I tried to compile alsa-lib with static support, but > > without luck (-ldl is always needed in the gcc line > > and gcc always prints some weird warnings). Since I > > don't need external plugins nor ladspa, I think there > > should be a way to compile an application in a 100% > > static manner, but I still have to figure out how. > > > > I also found this thread with a similar problem with > > uClinux > > http://www.mail-archive.com/alsa-user@lists.sourceforge.net/msg18253.html > > but at the end I did not understand how/if the problem > > was solved. > > > > Do you think it should be possible to compile alsa-lib > > with no dependencies on dl? How? > > > > Otherwise, would it be possible to write an alsa > > application that does not rely on alsa-lib (i.e., > > by using the alsa kernel APIs directly)? Has someone > > already tried it? Some hints? > > > > Every hint is extremely welcome > > I worked on this sometime ago, and made a patch to build alsa-lib > without pthread and libdl. I don't remember why this wasn't applied. > IIRC, ulibc has the wrappers for pthread and libdl, so this wasn't > needed at that time in the end. > > Otherwise, it should work. Build with --enable-static > --disable-shared, --disble-mixer, --disable-hwdep, etc. ... oh, not perfectly if really no pcm plugin is used. The patch below fixes the build problem. Already applied to HG tree. Takashi diff -r f1203eb7eb48 configure.in --- a/configure.in Tue Mar 13 10:44:28 2007 +0100 +++ b/configure.in Fri Mar 16 15:18:21 2007 +0100 @@ -371,6 +371,7 @@ fi dnl Create PCM plugin symbol list for static library rm -f "$srcdir"/src/pcm/pcm_symbols_list.c +touch "$srcdir"/src/pcm/pcm_symbols_list.c for t in $PCM_PLUGIN_LIST; do if eval test \$build_pcm_$t = yes; then echo \&_snd_module_pcm_$t, >> "$srcdir"/src/pcm/pcm_symbols_list.c ------------------------------------------------------------------------- Take Surveys. Earn Cash. Influence the Future of IT Join SourceForge.net's Techsay panel and you'll get the chance to share your opinions on IT & business topics through brief surveys-and earn cash http://www.techsay.com/default.php?page=join.php&p=sourceforge&CID=DEVDEV ^ permalink raw reply [flat|nested] 11+ messages in thread
* Re: Static build of alsa-lib 2007-03-16 14:24 ` Takashi Iwai @ 2007-03-16 15:11 ` Ciaccia 2007-03-16 15:20 ` Takashi Iwai 0 siblings, 1 reply; 11+ messages in thread From: Ciaccia @ 2007-03-16 15:11 UTC (permalink / raw) To: Takashi Iwai; +Cc: alsa-devel Hi Takashi, Thanks for the answer. To I need both the patches or just the first one? Which alsa-lib release should I use with the patch, 1.0.13? PS: sorry, what is the HG tree? --- Takashi Iwai <tiwai@suse.de> wrote: > At Fri, 16 Mar 2007 15:18:04 +0100, > I wrote: > > > > At Fri, 16 Mar 2007 06:17:00 -0700 (PDT), > > Ciaccia wrote: > > > > > > Hi there, > > > I would like to compile an alsa application for > an > > > embedded system with no shared-libraries > support. My > > > application just needs PCM, with no plug-ins, no > mixer > > > and no midi and the application should be a > standalone > > > executable with no external dependencies, > otherwise it > > > will not work. > > > > > > I tried to compile alsa-lib with static support, > but > > > without luck (-ldl is always needed in the gcc > line > > > and gcc always prints some weird warnings). > Since I > > > don't need external plugins nor ladspa, I think > there > > > should be a way to compile an application in a > 100% > > > static manner, but I still have to figure out > how. > > > > > > I also found this thread with a similar problem > with > > > uClinux > > > > http://www.mail-archive.com/alsa-user@lists.sourceforge.net/msg18253.html > > > but at the end I did not understand how/if the > problem > > > was solved. > > > > > > Do you think it should be possible to compile > alsa-lib > > > with no dependencies on dl? How? > > > > > > Otherwise, would it be possible to write an alsa > > > application that does not rely on alsa-lib > (i.e., > > > by using the alsa kernel APIs directly)? Has > someone > > > already tried it? Some hints? > > > > > > Every hint is extremely welcome > > > > I worked on this sometime ago, and made a patch to > build alsa-lib > > without pthread and libdl. I don't remember why > this wasn't applied. > > IIRC, ulibc has the wrappers for pthread and > libdl, so this wasn't > > needed at that time in the end. > > > > Otherwise, it should work. Build with > --enable-static > > --disable-shared, --disble-mixer, --disable-hwdep, > etc. > > ... oh, not perfectly if really no pcm plugin is > used. > The patch below fixes the build problem. Already > applied to HG tree. > > > Takashi > > diff -r f1203eb7eb48 configure.in > --- a/configure.in Tue Mar 13 10:44:28 2007 +0100 > +++ b/configure.in Fri Mar 16 15:18:21 2007 +0100 > @@ -371,6 +371,7 @@ fi > > dnl Create PCM plugin symbol list for static > library > rm -f "$srcdir"/src/pcm/pcm_symbols_list.c > +touch "$srcdir"/src/pcm/pcm_symbols_list.c > for t in $PCM_PLUGIN_LIST; do > if eval test \$build_pcm_$t = yes; then > echo \&_snd_module_pcm_$t, >> > "$srcdir"/src/pcm/pcm_symbols_list.c > ____________________________________________________________________________________ Don't get soaked. Take a quick peek at the forecast with the Yahoo! Search weather shortcut. http://tools.search.yahoo.com/shortcuts/#loc_weather ------------------------------------------------------------------------- Take Surveys. Earn Cash. Influence the Future of IT Join SourceForge.net's Techsay panel and you'll get the chance to share your opinions on IT & business topics through brief surveys-and earn cash http://www.techsay.com/default.php?page=join.php&p=sourceforge&CID=DEVDEV ^ permalink raw reply [flat|nested] 11+ messages in thread
* Re: Static build of alsa-lib 2007-03-16 15:11 ` Ciaccia @ 2007-03-16 15:20 ` Takashi Iwai 0 siblings, 0 replies; 11+ messages in thread From: Takashi Iwai @ 2007-03-16 15:20 UTC (permalink / raw) To: Ciaccia; +Cc: alsa-devel At Fri, 16 Mar 2007 08:11:20 -0700 (PDT), Ciaccia wrote: > > Hi Takashi, > Thanks for the answer. To I need both the patches or > just the first one? The second one is for the fix to build without any extra pcm plugins (i.e. --with-pcm-plugins=hw or so). > Which alsa-lib release should I > use with the patch, 1.0.13? Better to use the latest HG version. > PS: sorry, what is the HG tree? HG (Mercurial) is what we are currently using as the source tree management. See www.alsa-project.org download section. The daily snapshot tarballs are available at ftp://ftp.suse.com/pub/projects/alsa/snapshot/ Takashi ------------------------------------------------------------------------- Take Surveys. Earn Cash. Influence the Future of IT Join SourceForge.net's Techsay panel and you'll get the chance to share your opinions on IT & business topics through brief surveys-and earn cash http://www.techsay.com/default.php?page=join.php&p=sourceforge&CID=DEVDEV ^ permalink raw reply [flat|nested] 11+ messages in thread
* Re: Static build of alsa-lib 2007-03-16 14:18 ` Takashi Iwai 2007-03-16 14:24 ` Takashi Iwai @ 2007-03-17 10:13 ` Ciaccia 2007-03-20 10:48 ` Takashi Iwai 1 sibling, 1 reply; 11+ messages in thread From: Ciaccia @ 2007-03-17 10:13 UTC (permalink / raw) To: Takashi Iwai; +Cc: alsa-devel Hi Takashi, I downloaded the last snapshot from hg (alsa-lib-hg20070317) and I applied the patch you included in your email. 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 I just need PCM, so I disable all the packages but PCM. Then I compiled my mini application (just snd_pcm_open, configure it and write some data to it) with the following command-line (I'm using gcc 4.1): $ gcc -o test test.c -L/tmp/alsa-lib-hg20070317/src/.libs/ -lasound -lm -lpthread -static and I got the following errors/warnings: /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 /tmp/alsa-lib-hg20070317/src/.libs//libasound.a(dlmisc.o): In function `snd_dlsym_verify': /tmp/alsa-lib-hg20070317/src/dlmisc.c:115: undefined reference to `dlsym' /tmp/alsa-lib-hg20070317/src/.libs//libasound.a(dlmisc.o): In function `snd_dlsym': /tmp/alsa-lib-hg20070317/src/dlmisc.c:159: undefined reference to `dlsym' /tmp/alsa-lib-hg20070317/src/.libs//libasound.a(dlmisc.o): In function `snd_dlclose': /tmp/alsa-lib-hg20070317/src/dlmisc.c:85: undefined reference to `dlclose' /tmp/alsa-lib-hg20070317/src/.libs//libasound.a(dlmisc.o): In function `snd_dlopen': /tmp/alsa-lib-hg20070317/src/dlmisc.c:64: undefined reference to `dlopen' collect2: ld returned 1 exit status Am I doing something wrong?!? Thanks Bye Andrea --- Takashi Iwai <tiwai@suse.de> wrote: > At Fri, 16 Mar 2007 06:17:00 -0700 (PDT), > Ciaccia wrote: > > > > Hi there, > > I would like to compile an alsa application for an > > embedded system with no shared-libraries support. > My > > application just needs PCM, with no plug-ins, no > mixer > > and no midi and the application should be a > standalone > > executable with no external dependencies, > otherwise it > > will not work. > > > > I tried to compile alsa-lib with static support, > but > > without luck (-ldl is always needed in the gcc > line > > and gcc always prints some weird warnings). Since > I > > don't need external plugins nor ladspa, I think > there > > should be a way to compile an application in a > 100% > > static manner, but I still have to figure out how. > > > > I also found this thread with a similar problem > with > > uClinux > > > http://www.mail-archive.com/alsa-user@lists.sourceforge.net/msg18253.html > > but at the end I did not understand how/if the > problem > > was solved. > > > > Do you think it should be possible to compile > alsa-lib > > with no dependencies on dl? How? > > > > Otherwise, would it be possible to write an alsa > > application that does not rely on alsa-lib (i.e., > > by using the alsa kernel APIs directly)? Has > someone > > already tried it? Some hints? > > > > Every hint is extremely welcome > > I worked on this sometime ago, and made a patch to > build alsa-lib > without pthread and libdl. I don't remember why > this wasn't applied. > IIRC, ulibc has the wrappers for pthread and libdl, > so this wasn't > needed at that time in the end. > > Otherwise, it should work. Build with > --enable-static > --disable-shared, --disble-mixer, --disable-hwdep, > etc. > > > Takashi > > diff -r f1203eb7eb48 configure.in > --- a/configure.in Tue Mar 13 10:44:28 2007 +0100 > +++ b/configure.in Fri Mar 16 15:07:51 2007 +0100 > @@ -148,6 +148,23 @@ else > else > AC_MSG_RESULT(no) > fi > + > +AC_CHECK_LIB([dl], [dlsym], [HAVE_LIBDL="yes"]) > +AC_CHECK_LIB([pthread], [pthread_join], > [HAVE_LIBPTHREAD="yes"]) > + > +ALSA_DEPLIBS="" > +if test "$softfloat" != "yes"; then > + ALSA_DEPLIBS="-lm" > +fi > +if test "$HAVE_LIBDL" = "yes"; then > + ALSA_DEPLIBS="$ALSA_DEPLIBS -ldl" > + AC_DEFINE([HAVE_LIBDL], 1, [Have libdl]) > +fi > +if test "$HAVE_LIBPTHREAD" = "yes"; then > + ALSA_DEPLIBS="$ALSA_DEPLIBS -lpthread" > + AC_DEFINE([HAVE_LIBPTHREAD], 1, [Have > libpthread]) > +fi > +AC_SUBST(ALSA_DEPLIBS) > > dnl Check for architecture > AC_MSG_CHECKING(for architecture) > diff -r f1203eb7eb48 include/local.h > --- a/include/local.h Tue Mar 13 10:44:28 2007 +0100 > +++ b/include/local.h Fri Mar 16 15:07:51 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 f1203eb7eb48 src/Makefile.am > --- a/src/Makefile.am Tue Mar 13 10:44:28 2007 +0100 > +++ b/src/Makefile.am Fri Mar 16 15:07:51 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 f1203eb7eb48 src/async.c > --- a/src/async.c Tue Mar 13 10:44:28 2007 +0100 > +++ b/src/async.c Fri Mar 16 15:07:51 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 f1203eb7eb48 src/conf.c > --- a/src/conf.c Tue Mar 13 10:44:28 2007 +0100 > +++ b/src/conf.c Fri Mar 16 15:07:51 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; > === message truncated === ____________________________________________________________________________________ Bored stiff? Loosen up... Download and play hundreds of games for free on Yahoo! Games. http://games.yahoo.com/games/front ------------------------------------------------------------------------- Take Surveys. Earn Cash. Influence the Future of IT Join SourceForge.net's Techsay panel and you'll get the chance to share your opinions on IT & business topics through brief surveys-and earn cash http://www.techsay.com/default.php?page=join.php&p=sourceforge&CID=DEVDEV ^ permalink raw reply [flat|nested] 11+ messages in thread
* Re: Static build of alsa-lib 2007-03-17 10:13 ` Ciaccia @ 2007-03-20 10:48 ` Takashi Iwai 2007-03-20 12:00 ` Rene Herman 2007-03-20 15:13 ` Ciaccia 0 siblings, 2 replies; 11+ messages in thread From: Takashi Iwai @ 2007-03-20 10:48 UTC (permalink / raw) To: Ciaccia; +Cc: alsa-devel At Sat, 17 Mar 2007 03:13:06 -0700 (PDT), Ciaccia wrote: > > Hi Takashi, > I downloaded the last snapshot from hg > (alsa-lib-hg20070317) and I applied the patch you > included in your email. 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 > > > I just need PCM, so I disable all the packages but > PCM. Then I compiled my mini application (just > snd_pcm_open, configure it and write some data to it) > with the following command-line (I'm using gcc 4.1): > > $ gcc -o test test.c > -L/tmp/alsa-lib-hg20070317/src/.libs/ -lasound -lm > -lpthread -static > > and I got the following errors/warnings: > > /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 > /tmp/alsa-lib-hg20070317/src/.libs//libasound.a(dlmisc.o): > In function `snd_dlsym_verify': > /tmp/alsa-lib-hg20070317/src/dlmisc.c:115: undefined > reference to `dlsym' > /tmp/alsa-lib-hg20070317/src/.libs//libasound.a(dlmisc.o): > In function `snd_dlsym': > /tmp/alsa-lib-hg20070317/src/dlmisc.c:159: undefined > reference to `dlsym' > /tmp/alsa-lib-hg20070317/src/.libs//libasound.a(dlmisc.o): > In function `snd_dlclose': > /tmp/alsa-lib-hg20070317/src/dlmisc.c:85: undefined > reference to `dlclose' > /tmp/alsa-lib-hg20070317/src/.libs//libasound.a(dlmisc.o): > In function `snd_dlopen': > /tmp/alsa-lib-hg20070317/src/dlmisc.c:64: undefined > reference to `dlopen' > collect2: ld returned 1 exit status > > Am I doing something wrong?!? No. But, as you find in my patch, the configure checks whether libdl and pthread are available and doesn't provide the flag to disable them. That's why these functions are still there. Note that the concept of dynamic loading doesn't conflict with static library. So, unconditionally disabling libdl with a static lib is a bad idea. Rather we can add options to disable libdl and libpthread, not only detecting them. Takashi > > Thanks > Bye > Andrea > > --- Takashi Iwai <tiwai@suse.de> wrote: > > > At Fri, 16 Mar 2007 06:17:00 -0700 (PDT), > > Ciaccia wrote: > > > > > > Hi there, > > > I would like to compile an alsa application for an > > > embedded system with no shared-libraries support. > > My > > > application just needs PCM, with no plug-ins, no > > mixer > > > and no midi and the application should be a > > standalone > > > executable with no external dependencies, > > otherwise it > > > will not work. > > > > > > I tried to compile alsa-lib with static support, > > but > > > without luck (-ldl is always needed in the gcc > > line > > > and gcc always prints some weird warnings). Since > > I > > > don't need external plugins nor ladspa, I think > > there > > > should be a way to compile an application in a > > 100% > > > static manner, but I still have to figure out how. > > > > > > I also found this thread with a similar problem > > with > > > uClinux > > > > > > http://www.mail-archive.com/alsa-user@lists.sourceforge.net/msg18253.html > > > but at the end I did not understand how/if the > > problem > > > was solved. > > > > > > Do you think it should be possible to compile > > alsa-lib > > > with no dependencies on dl? How? > > > > > > Otherwise, would it be possible to write an alsa > > > application that does not rely on alsa-lib (i.e., > > > by using the alsa kernel APIs directly)? Has > > someone > > > already tried it? Some hints? > > > > > > Every hint is extremely welcome > > > > I worked on this sometime ago, and made a patch to > > build alsa-lib > > without pthread and libdl. I don't remember why > > this wasn't applied. > > IIRC, ulibc has the wrappers for pthread and libdl, > > so this wasn't > > needed at that time in the end. > > > > Otherwise, it should work. Build with > > --enable-static > > --disable-shared, --disble-mixer, --disable-hwdep, > > etc. > > > > > > Takashi > > > > diff -r f1203eb7eb48 configure.in > > --- a/configure.in Tue Mar 13 10:44:28 2007 +0100 > > +++ b/configure.in Fri Mar 16 15:07:51 2007 +0100 > > @@ -148,6 +148,23 @@ else > > else > > AC_MSG_RESULT(no) > > fi > > + > > +AC_CHECK_LIB([dl], [dlsym], [HAVE_LIBDL="yes"]) > > +AC_CHECK_LIB([pthread], [pthread_join], > > [HAVE_LIBPTHREAD="yes"]) > > + > > +ALSA_DEPLIBS="" > > +if test "$softfloat" != "yes"; then > > + ALSA_DEPLIBS="-lm" > > +fi > > +if test "$HAVE_LIBDL" = "yes"; then > > + ALSA_DEPLIBS="$ALSA_DEPLIBS -ldl" > > + AC_DEFINE([HAVE_LIBDL], 1, [Have libdl]) > > +fi > > +if test "$HAVE_LIBPTHREAD" = "yes"; then > > + ALSA_DEPLIBS="$ALSA_DEPLIBS -lpthread" > > + AC_DEFINE([HAVE_LIBPTHREAD], 1, [Have > > libpthread]) > > +fi > > +AC_SUBST(ALSA_DEPLIBS) > > > > dnl Check for architecture > > AC_MSG_CHECKING(for architecture) > > diff -r f1203eb7eb48 include/local.h > > --- a/include/local.h Tue Mar 13 10:44:28 2007 +0100 > > +++ b/include/local.h Fri Mar 16 15:07:51 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 f1203eb7eb48 src/Makefile.am > > --- a/src/Makefile.am Tue Mar 13 10:44:28 2007 +0100 > > +++ b/src/Makefile.am Fri Mar 16 15:07:51 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 f1203eb7eb48 src/async.c > > --- a/src/async.c Tue Mar 13 10:44:28 2007 +0100 > > +++ b/src/async.c Fri Mar 16 15:07:51 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 f1203eb7eb48 src/conf.c > > --- a/src/conf.c Tue Mar 13 10:44:28 2007 +0100 > > +++ b/src/conf.c Fri Mar 16 15:07:51 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; > > > === message truncated === > > > > > ____________________________________________________________________________________ > Bored stiff? Loosen up... > Download and play hundreds of games for free on Yahoo! Games. > http://games.yahoo.com/games/front > ------------------------------------------------------------------------- Take Surveys. Earn Cash. Influence the Future of IT Join SourceForge.net's Techsay panel and you'll get the chance to share your opinions on IT & business topics through brief surveys-and earn cash http://www.techsay.com/default.php?page=join.php&p=sourceforge&CID=DEVDEV ^ permalink raw reply [flat|nested] 11+ messages in thread
* Re: Static build of alsa-lib 2007-03-20 10:48 ` Takashi Iwai @ 2007-03-20 12:00 ` Rene Herman 2007-03-20 15:13 ` Ciaccia 1 sibling, 0 replies; 11+ messages in thread From: Rene Herman @ 2007-03-20 12:00 UTC (permalink / raw) To: Takashi Iwai; +Cc: alsa-devel, Jaroslav Kysela On 03/20/2007 11:48 AM, Takashi Iwai wrote: > No. But, as you find in my patch, the configure checks [ ... ] Takashi, Jaroslav, list: something isnt right with that moderation interface on sourceforge. This was one of 3 messages I approved in one go yet this is the only one that has made it onto the list until now. I even have a message from Rask Ingemann Lambertsen in my inbox, sent yesterday, that I havent seen appear on the list either (yet, but I doubt its going to show up). If sourceforge keeps bugging/lagging like this, moderation may not be a solution either. Rene. ------------------------------------------------------------------------- Take Surveys. Earn Cash. Influence the Future of IT Join SourceForge.net's Techsay panel and you'll get the chance to share your opinions on IT & business topics through brief surveys-and earn cash http://www.techsay.com/default.php?page=join.php&p=sourceforge&CID=DEVDEV ^ permalink raw reply [flat|nested] 11+ messages in thread
* Re: Static build of alsa-lib 2007-03-20 10:48 ` Takashi Iwai 2007-03-20 12:00 ` Rene Herman @ 2007-03-20 15:13 ` Ciaccia 2007-03-20 16:01 ` [Alsa-devel] " Takashi Iwai 1 sibling, 1 reply; 11+ messages in thread From: Ciaccia @ 2007-03-20 15:13 UTC (permalink / raw) To: Takashi Iwai; +Cc: alsa-devel, alsa-devel 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? Thanks again Andrea --- Takashi Iwai <tiwai@suse.de> wrote: > At Sat, 17 Mar 2007 03:13:06 -0700 (PDT), > Ciaccia wrote: > > > > Hi Takashi, > > I downloaded the last snapshot from hg > > (alsa-lib-hg20070317) and I applied the patch you > > included in your email. 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 > > > > > > I just need PCM, so I disable all the packages but > > PCM. Then I compiled my mini application (just > > snd_pcm_open, configure it and write some data to > it) > > with the following command-line (I'm using gcc > 4.1): > > > > $ gcc -o test test.c > > -L/tmp/alsa-lib-hg20070317/src/.libs/ -lasound -lm > > -lpthread -static > > > > and I got the following errors/warnings: > > > > > /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 > > > /tmp/alsa-lib-hg20070317/src/.libs//libasound.a(dlmisc.o): > > In function `snd_dlsym_verify': > > /tmp/alsa-lib-hg20070317/src/dlmisc.c:115: > undefined > > reference to `dlsym' > > > /tmp/alsa-lib-hg20070317/src/.libs//libasound.a(dlmisc.o): > > In function `snd_dlsym': > > /tmp/alsa-lib-hg20070317/src/dlmisc.c:159: > undefined > > reference to `dlsym' > > > /tmp/alsa-lib-hg20070317/src/.libs//libasound.a(dlmisc.o): > > In function `snd_dlclose': > > /tmp/alsa-lib-hg20070317/src/dlmisc.c:85: > undefined > > reference to `dlclose' > > > /tmp/alsa-lib-hg20070317/src/.libs//libasound.a(dlmisc.o): > > In function `snd_dlopen': > > /tmp/alsa-lib-hg20070317/src/dlmisc.c:64: > undefined > > reference to `dlopen' > > collect2: ld returned 1 exit status > > > > Am I doing something wrong?!? > > No. But, as you find in my patch, the configure > checks whether libdl > and pthread are available and doesn't provide the > flag to disable > them. That's why these functions are still there. > > Note that the concept of dynamic loading doesn't > conflict with static > library. So, unconditionally disabling libdl with a > static lib is a > bad idea. Rather we can add options to disable > libdl and libpthread, > not only detecting them. > > > Takashi > > > > > Thanks > > Bye > > Andrea > > > > --- Takashi Iwai <tiwai@suse.de> wrote: > > > > > At Fri, 16 Mar 2007 06:17:00 -0700 (PDT), > > > Ciaccia wrote: > > > > > > > > Hi there, > > > > I would like to compile an alsa application > for an > > > > embedded system with no shared-libraries > support. > > > My > > > > application just needs PCM, with no plug-ins, > no > > > mixer > > > > and no midi and the application should be a > > > standalone > > > > executable with no external dependencies, > > > otherwise it > > > > will not work. > > > > > > > > I tried to compile alsa-lib with static > support, > > > but > > > > without luck (-ldl is always needed in the gcc > > > line > > > > and gcc always prints some weird warnings). > Since > > > I > > > > don't need external plugins nor ladspa, I > think > > > there > > > > should be a way to compile an application in a > > > 100% > > > > static manner, but I still have to figure out > how. > > > > > > > > I also found this thread with a similar > problem > > > with > > > > uClinux > > > > > > > > > > http://www.mail-archive.com/alsa-user@lists.sourceforge.net/msg18253.html > > > > but at the end I did not understand how/if the > > > problem > > > > was solved. > > > > > > > > Do you think it should be possible to compile > > > alsa-lib > > > > with no dependencies on dl? How? > > > > > > > > Otherwise, would it be possible to write an > alsa > > > > application that does not rely on alsa-lib > (i.e., > > > > by using the alsa kernel APIs directly)? Has > > > someone > > > > already tried it? Some hints? > > > > > > > > Every hint is extremely welcome > > > > > > I worked on this sometime ago, and made a patch > to > > > build alsa-lib > > > without pthread and libdl. I don't remember why > > > this wasn't applied. > > > IIRC, ulibc has the wrappers for pthread and > libdl, > > > so this wasn't > > > needed at that time in the end. > > > > > > Otherwise, it should work. Build with > > > --enable-static > > > --disable-shared, --disble-mixer, > --disable-hwdep, > > > etc. > > > > > > > > > Takashi > > > > > > diff -r f1203eb7eb48 configure.in > > > --- a/configure.in Tue Mar 13 10:44:28 2007 > +0100 > > > +++ b/configure.in Fri Mar 16 15:07:51 2007 > +0100 > > > @@ -148,6 +148,23 @@ else > > > else > > > AC_MSG_RESULT(no) > > > fi > > > + > > > +AC_CHECK_LIB([dl], [dlsym], [HAVE_LIBDL="yes"]) > > > +AC_CHECK_LIB([pthread], [pthread_join], > > > [HAVE_LIBPTHREAD="yes"]) > > > + > > > +ALSA_DEPLIBS="" > > > +if test "$softfloat" != "yes"; then > > > + ALSA_DEPLIBS="-lm" > > > +fi > > > +if test "$HAVE_LIBDL" = "yes"; then > > > + ALSA_DEPLIBS="$ALSA_DEPLIBS -ldl" > > > + AC_DEFINE([HAVE_LIBDL], 1, [Have libdl]) > > > +fi > > > +if test "$HAVE_LIBPTHREAD" = "yes"; then > > > + ALSA_DEPLIBS="$ALSA_DEPLIBS -lpthread" > > > + AC_DEFINE([HAVE_LIBPTHREAD], 1, [Have > > > libpthread]) > > > +fi > > > +AC_SUBST(ALSA_DEPLIBS) > > > > > > dnl Check for architecture > > > AC_MSG_CHECKING(for architecture) > === message truncated === ____________________________________________________________________________________ Don't get soaked. Take a quick peek at the forecast with the Yahoo! Search weather shortcut. http://tools.search.yahoo.com/shortcuts/#loc_weather ------------------------------------------------------------------------- Take Surveys. Earn Cash. Influence the Future of IT Join SourceForge.net's Techsay panel and you'll get the chance to share your opinions on IT & business topics through brief surveys-and earn cash http://www.techsay.com/default.php?page=join.php&p=sourceforge&CID=DEVDEV ^ permalink raw reply [flat|nested] 11+ messages in thread
* Re: [Alsa-devel] Static build of alsa-lib 2007-03-20 15:13 ` Ciaccia @ 2007-03-20 16:01 ` Takashi Iwai 2007-03-21 19:00 ` Ciaccia 0 siblings, 1 reply; 11+ messages in thread From: Takashi Iwai @ 2007-03-20 16:01 UTC (permalink / raw) To: Ciaccia; +Cc: alsa-devel, alsa-devel 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 ^ permalink raw reply [flat|nested] 11+ messages in thread
* Re: [Alsa-devel] Static build of alsa-lib 2007-03-20 16:01 ` [Alsa-devel] " Takashi Iwai @ 2007-03-21 19:00 ` Ciaccia 0 siblings, 0 replies; 11+ messages in thread From: Ciaccia @ 2007-03-21 19:00 UTC (permalink / raw) To: Takashi Iwai; +Cc: alsa-devel, alsa-devel 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 ^ permalink raw reply [flat|nested] 11+ messages in thread
end of thread, other threads:[~2007-03-21 19:00 UTC | newest] Thread overview: 11+ messages (download: mbox.gz follow: Atom feed -- links below jump to the message on this page -- 2007-03-16 13:17 Static build of alsa-lib Ciaccia 2007-03-16 14:18 ` Takashi Iwai 2007-03-16 14:24 ` Takashi Iwai 2007-03-16 15:11 ` Ciaccia 2007-03-16 15:20 ` Takashi Iwai 2007-03-17 10:13 ` Ciaccia 2007-03-20 10:48 ` Takashi Iwai 2007-03-20 12:00 ` Rene Herman 2007-03-20 15:13 ` Ciaccia 2007-03-20 16:01 ` [Alsa-devel] " Takashi Iwai 2007-03-21 19:00 ` Ciaccia
This is an external index of several public inboxes, see mirroring instructions on how to clone and mirror all data and code used by this external index.