什么是链接共享库的正确方法?
问题描述:
我是交叉编译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.*
文件是什么意思?
答
在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
软件包一起安装。您可以简单地手动创建它。
$ objdump -x /usr/lib/libasound.so | grep SONAME
SONAME libasound.so.2
这使得动态链接程序来查找该名称在运行时,不管你用什么编译器选项:因为图书馆在头一个SONAME
entry不可以运行时需要的。
我希望我对此有所了解,因为它有点复杂......
+0
这确实有很大的意义。谢谢。 –
“我最新的交叉编译器” - 从哪个供应商?它是基于'gcc'还是'gcc'? –
“我很积极,这不是正确的做法,虽然” - 我会让你失望:是的。 – 2013-07-10 19:50:09
是的,这是gcc,作为完整的工具链由angstrom发布发布 –