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

时间:2014-06-17 18:39:18

标签: c linux alsa

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

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

gcc -shared -Wl,-soname -Wl,libasound_module_pcm_mod.so -lasound  -fPIC  adt_dsp_alsa.o -o libasound_module_pcm_mod.so

然而,当我尝试在应用程序中打开库时,表示无法打开它。运行ldd -d -r libasound_module_pcm_mod.so我得到很多未定义的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中定义

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

1 个答案:

答案 0 :(得分:2)

您的-lasound位置错误。大多数发行版使用--as-needed标志运行链接器,因此如果链接到目前为止在命令行上不需要的共享库,它将被省略。

gcc -shared -Wl,-soname -Wl,libasound_module_pcm_mod.so -fPIC adt_dsp_alsa.o -o libasound_module_pcm_mod.so -lasound