At Thu, 25 Sep 2008 14:27:28 +0300, Motti Daniel wrote:
Takashi Iwai wrote:
At Thu, 25 Sep 2008 13:13:14 +0300, Motti Daniel wrote: Hello people! I'm working on an Alsa plugin for the Xandros Linux distribution my plugin runs very well except it consume about 20% of resources from the target machine (eee pc at 1.6Ghz) I'm trying to compile the same code with Intel Compiler (version 10.1.017) (before that it was compiled with gcc 4.1.2) the plugin compiles well but when I try to play music it tells me that the plugin library (the .so file in /usr/lib/alsa-lib/ is not there. What exactly is the error message? It's a big difference between non-existing file and non-defined symbol.
This is the error:
/home/user> aplay aint.wav ALSA lib pcm.c:2106:(snd_pcm_open_conf) Cannot open shared library /usr/lib/ alsa-lib/libasound_module_pcm_maxxaudio.so aplay: main:550: audio open error: No such file or directory /home/user> ls -la /usr/lib/alsa-lib/libasound_module_pcm_maxxaudio.so -rw-r--r-- 1 root root 14944 2008-09-23 23:31 /usr/lib/alsa-lib/ libasound_module_pcm_maxxaudio.so /home/user> sudo rm /usr/lib/alsa-lib/libasound_module_pcm_maxxaudio.so /home/user> aplay aint.wav ALSA lib pcm.c:2106:(snd_pcm_open_conf) Cannot open shared library /usr/lib/ alsa-lib/libasound_module_pcm_maxxaudio.so aplay: main:550: audio open error: No such file or directory
as you can see the file exist and when I erased it I get the same message
Then it's the error from snd_dlopen(). Likely missing ifdef or so...
I tried to analyze the symbols in the executable and found that the difference between gcc and Intel compiler is a list of symbols with a suffix __FUNCTION__ or __PRETTY_FUNCTION__ is this the problem? I don't think so. These should be replaced at compile time, and you must get relevant compile errors/warnings.
The only warning I get it about unused variables.
Then these were handled properly.
any suggestions? can you tell me what are the minimum alsa requirements from a dynamic library so it can be loaded and run as an Alsa plugin? First, check whether your plugin was properly opened and symbol resolution worked. The alsa-lib calls snd_dlopen() to open the plugin, and call snd_dlsym() for symbols. Catch them via gdb or so. There are configure checks for dlopen, etc, defining CONFIG_HAVE_LIBDL. Make sure that this passed in your case.
Thanks! I'll try that...
Also make sure that you compile with -DPIC. Usually configure checks it, but I'm not sure whether it works for icc.
Takashi