[英]What is the correct way to link against shared libraries?
我正在交叉编译一个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
和其他autotools很有用。 libasound.so
是工具链使用的库的符号链接。 这是与-lasound
链接时查找的文件。 你错过了最后一个,也许是因为在基于debian的系统中它只与libasound-dev
软件包一起安装。 您可以手动创建它。 在运行时期间不需要它,因为库在标头中有一个SONAME
条目:
$ objdump -x /usr/lib/libasound.so | grep SONAME
SONAME libasound.so.2
这使得动态链接器在运行时查找该名称,无论您使用何种编译器选项。
我希望我对此有所了解,因为它有点复杂......
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.