簡體   English   中英

鏈接共享庫的正確方法是什么?

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

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM