Hi all,
we experience a fairly strange problem with the versioned symbols in
the libasound.so. We have a C++ wrapper library which is normally
linked as shared obkect, too. But for some strange reasonsthe linker
does not map stuff like "snd_pcm_hw_params_get_channels_max" and
friends (with a pointer to the val at the end, now) to the correct
symbol.
Of course when linked statically into a single binary it works fine.
Example log of some testing:
Let's link a normal object and a shared obeject of the ALSAHelper:
[EMAIL PROTECTED]:~/develop/trunk/lowlevel/src$ g++ -g -Wall -I. -I../include
-I../../dam/include -I../../utility/include -c -o ALSAHelper.o ALSAHelper.cc
[EMAIL PROTECTED]:~/develop/trunk/lowlevel/src$ g++ --shared -g -Wall -I.
-I../include -I../../dam/include -I../../utility/include -o ALSAHelper.so ALSAHelper.cc
And now let's link the test application:
First the shared object:
[EMAIL PROTECTED]:~/develop/trunk2/lowlevel/tests$ g++ -g -Wall -I. -I../include
-I../../dam/include -I../../utility/include -o ALSAHelper ALSAHelper.cc
../src/ALSAHelper.so -lasound
[EMAIL PROTECTED]:~/develop/trunk2/lowlevel/tests$ ./ALSAHelper
Format 16 bit
Channels min: 268513264
Channels max: 268513264
Rate min: 0
Rate max: 0
Periods min: 0
Periods max: 0
Period Size: 0
Get periods: 0
Hm - quite incorrect values - let's see which symbol is used:
gdb) bt
#0 0x0ff433f0 in __old_snd_pcm_hw_params_get_channels_max (params=0x10013498)
at pcm.c:6407
#1 0x0ffdc438 in GSMP::ALSAPCM::GetChannelsMax() (this=0x7ffff4e0)
at ALSAHelper.cc:342
#2 0x10002238 in main () at ALSAHelper.cc:67
Hm - but it works fine linked statically with the normal obcject:
[EMAIL PROTECTED]:~/develop/trunk2/lowlevel/tests$ g++ -g -Wall -I. -I../include
-I../../dam/include -I../../utility/include -o ALSAHelper ALSAHelper.cc
../src/ALSAHelper.o -lasound
[EMAIL PROTECTED]:~/develop/trunk2/lowlevel/tests$ ./ALSAHelper
Format 16 bit
Channels min: 2
Channels max: 2
Rate min: 44100
Rate max: 48000
Periods min: 1
Periods max: 32
Period Size: 2048
Get periods: 4
;-) - and which symbol is used:
(gdb) bt
#0 __snd_pcm_hw_params_get_channels_max (params=0x10017f68, val=0x7fffe48c)
at pcm.c:3334
#1 0x10003cac in GSMP::ALSAPCM::GetChannelsMax() (this=0x7ffff4e0)
at ALSAHelper.cc:342
#2 0x10001c00 in main () at ALSAHelper.cc:67
Any idea what is happening to ALSA's symbol versioning using shared
objects?
In the case it matters, this is all on PowerPC (ROCK Linux) ...
gcc (GCC) 3.2.3
GNU C Library stable release version 2.3.2, by Roland McGrath et al.
GNU ld version 2.14.90.0.4.1 20030523
GNU assembler 2.14.90.0.4.1 20030523
Thanks in advance - yours,
Ren�
--
Ren� Rebe - Europe/Germany/Berlin
[EMAIL PROTECTED] [EMAIL PROTECTED]
http://www.rocklinux.org http://www.rocklinux-consulting.de
http://gsmp.tfh-berlin.de/gsmp http://gsmp.tfh-berlin.de/rene
-------------------------------------------------------
The SF.Net email is sponsored by EclipseCon 2004
Premiere Conference on Open Tools Development and Integration
See the breadth of Eclipse activity. February 3-5 in Anaheim, CA.
http://www.eclipsecon.org/osdn
_______________________________________________
Alsa-devel mailing list
[EMAIL PROTECTED]
https://lists.sourceforge.net/lists/listinfo/alsa-devel