2

我正在交叉编译一个 C 应用程序并链接到 alsa 库-lasound

我最新的交叉编译器说它找不到库,所以我在编译器的库目录中探索并找到了。

libasound.la libasound.so.2 libasound.so.2.0.0

我没有找到libasound.so,所以为了解决我的问题,我创建了一个符号链接

ln -s libasound.so.2.0.0 libasound.so

现在一切似乎都很好。我很肯定这不是正确的方法。我应该使用不同的链接器选项来链接吗?每个不同的libasound.*文件是什么意思?

4

1 回答 1

4

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

这使得动态链接器在运行时查找该名称,无论您使用什么编译器选项。

我希望我对此有所了解,因为它有点复杂......

于 2013-07-10T20:19:58.713 回答