我正在构建一个依赖于另一个共享库的共享库。具体来说,我正在构建一个使用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中定义
我是否需要以不同的方式构建我的库,或者以不同的方式配置我的系统以使其工作?我是共享库的新手,所以任何指针都会非常感激!
答案 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