[英]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.