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

Reply via email to