2013-07-10 67 views
1

我是交叉編譯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.*文件是什麼意思?

+0

「我最新的交叉編譯器」 - 從哪個供應商?它是基於'gcc'還是'gcc'? –

+3

「我很積極,這不是正確的做法,雖然」 - 我會讓你失望:是的。 – 2013-07-10 19:50:09

+0

是的,這是gcc,作爲完整的工具鏈由angstrom發佈發佈 –

回答

2

在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

這確實有很大的意義。謝謝。 –