链接共享库的正确方法是什么?

时间:2013-07-10 19:46:35

标签: c linker

我正在交叉编译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.*文件意味着什么?

1 个答案:

答案 0 :(得分:3)

Linux中最常用的库名是:

  • 真正的图书馆是libasound.so.2.0.0。最后3个数字是库版本(major.minor.revision)。
  • libasound.so.2是指向库的首选(最新)2. *版本的符号链接,如果您在系统中安装了多个版本。假设所有2. *版本都是向后二进制兼容的。
  • libasound.la是一个文本文件,其中包含有关与libtool一起使用的库的大量信息。如果您使用libtool和其他autotools,则非常有用。
  • libasound.so是工具链使用的库的符号链接。这是您与-lasound链接时查找的文件。

您错过了最后一个,可能是因为在基于debian的系统中,它仅与libasound-dev包一起安装。您可以手动创建它。在运行时期间不需要它,因为库在标题中有一个SONAME条目:

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

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

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