我正在交叉编译一个C应用程序,并使用-lasound链接到alsa库
我最新的交叉编译器说它找不到库,所以我在编译器的库目录中搜索并找到了。
libasound.la
libasound.so.2
libasound.so.2.0.0
我没有找到libasound.so,所以为了解决我的问题,我创建了一个sym链接
ln -s libasound.so.2.0.0 libasound.so
现在一切似乎都好了。我很肯定这不是正确的方法。我应该使用不同的链接器选项来链接这个吗?每个不同的libasound.*文件意味着什么?

最佳答案

Linux中最常用的库名称是:
真正的库是libasound.so.2.0.0。最后3个数字是库版本(major.minor.revision)。
libasound.so.2是指向库的首选(最新)2.*版本的符号链接,如果系统中安装了多个库。假设所有2.*版本都是向后二进制兼容的。
libasound.la是一个文本文件,其中包含有关要与libtool一起使用的库的大量信息。如果使用libtool和其他自动工具,则很有用。
libasound.so是指向要由工具链使用的库的符号链接。这是链接-lasound时查找的文件。
您缺少最后一个,可能是因为在基于debian的系统中,它只与libasound-dev包一起安装。您只需手动创建它。运行时不需要它,因为库的头中有一个SONAME条目:

$ objdump -x /usr/lib/libasound.so | grep SONAME
  SONAME               libasound.so.2

这使得动态链接器在运行时查找该名称,无论您使用什么编译器选项。
我希望我能理解,因为这有点复杂。。。

关于c - 与共享库链接的正确方法是什么?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/17579622/

10-11 07:08