C linux中如何解决库间依赖关系?

C linux中如何解决库间依赖关系?,c,linux,alsa,C,Linux,Alsa,我正在构建一个依赖于另一个共享库的共享库。具体来说,我正在构建一个ALSA插件,它使用libasound中的符号 我可以通过以下方式构建我的共享库: gcc -shared -Wl,-soname -Wl,libasound_module_pcm_mod.so -lasound -fPIC adt_dsp_alsa.o -o libasound_module_pcm_mod.so 但是,当我试图在应用程序中打开库时,is说它无法打开。运行ldd-d-r libasound\u module

我正在构建一个依赖于另一个共享库的共享库。具体来说,我正在构建一个ALSA插件,它使用libasound中的符号

我可以通过以下方式构建我的共享库:

gcc -shared -Wl,-soname -Wl,libasound_module_pcm_mod.so -lasound  -fPIC  adt_dsp_alsa.o -o libasound_module_pcm_mod.so
但是,当我试图在应用程序中打开库时,is说它无法打开。运行
ldd-d-r libasound\u module\u pcm\u mod。因此
我得到了许多对libasound符号的未定义引用

ldd -d -r bin/x86/libasound_module_pcm_adt_dsp.so 
linux-gate.so.1 =>  (0x00336000)
libc.so.6 => /lib/i386-linux-gnu/libc.so.6 (0x00167000)
/lib/ld-linux.so.2 (0x005d4000)
undefined symbol: snd_lib_error (bin/x86/libasound_module_pcm_adt_dsp.so)
这些符号在asoundlib中定义


我是否需要以不同的方式构建我的库,或者以不同的方式配置我的系统以使其工作?我是共享库的新手,所以任何指点都将不胜感激

你的
-lasound
放错地方了。大多数发行版都使用
--as needed
标志运行链接器,因此,如果您在命令行上链接到一个目前还不需要的共享库,它将被忽略

gcc-共享-Wl,-soname-Wl,libasound_模块pcm_mod.so-fPIC adt_dsp_alsa.o-o libasound_模块pcm_mod.so-lasound