天天看點

undefined reference to `snd_pcm_open'

關于本文更詳細的内容,歡迎關注我的個人網站《程式員網》

這幾天在做一個區域網路的對講機和廣播系統。

需要用到alsa的庫來進行音頻采集和播放。

但是在編譯程式的時候有個比較奇怪的問題。

undefined reference to `snd_pcm_open’

一般來說,這肯定是程式連結的時候,找不到連結庫。

可我明明在gcc的參數裡面加了 -lasound 選項。

後來發現,原來-lasound這個參數的位置會影響到編譯的結果。

不能通過的寫法:gcc -lasound -o main main.o

可以編譯通過的寫法:gcc -o main main.o -lasound

進一步查資料發現:

gcc中庫的連結順序是從右往左進行,是以要把最基礎實作的庫放在最後,這樣左邊的lib就可以調用右邊的lib中的代碼。同時,當一個函數的實作代碼在多個lib都存在時,最左邊的lib代碼最後link,是以也将最終儲存下來。

(由于時間關系我沒有再深入了解,更多的資料請自行查閱)

關于本文更詳細的内容,歡迎關注我的個人網站《程式員網》

IT從業人員需要及時關注技術動态,但是網際網路的内容過于離散,好東西往往隐藏得很深。現在可以在微信公衆号裡面搜尋關注“老魚的IT技術分享”,訂閱每天彙總的IT技術資訊。歡迎大家關注!

undefined reference to `snd_pcm_open'

繼續閱讀