2013-07-26 39 views
0

我有一些嚴重的問題,鏈接到其他圖書館與G ++時,經常讓我很沮喪地獄,並停止在我面前,我甚至開始。問題使用與依賴G ++

例如:我只是用Boost.Asio的,嘗試的教程。我在文檔中發現我必須鏈接到boost_system和正則表達式,但由於某種原因,我還必須添加pthread才能正常工作......我已經使用'apt-get install'安裝了提升,並且想到了我必須鏈接是提升。顯然錯了......

看來我真的不知道如何在Linux上開發。如何知道何時需要添加庫?在我給出的例子中,boost依賴於pthread,所以我必須鏈接它。爲什麼我不必鏈接到任何其他東西提升取決於?或者假設pthread取決於某些東西,爲什麼我不必鏈接它(例如,爲什麼你不必鏈接到標準C庫)?你怎麼知道g ++是如何配置的?你怎麼能改變它?

我想我的主要問題是:是否有任何邏輯來配置Linux上構建? (有用的參考資料隨時歡迎也)

只是無奈的最後一點:它總是在我看來,編程是更多的樂趣和生活方式比實際得到它更容易...

+1

嘗試'man ldconfig'。 – lapk

回答

3

這是由於包裝錯誤。如果庫A依賴於庫B,即A應針對鏈接B.您的應用程序只需要對A.

鏈接有時,一些發行庫的打包得到它錯了。沒有什麼可以做的,真的。例如,當我在Gentoo Linux上與boost_system鏈接時,我不必鏈接到pthread,因爲boost_system自己鏈接到pthread:

 
$ ldd /usr/lib/libboost_system.so | grep pthread 
     libpthread.so.0 => /lib64/libpthread.so.0 (0x00007fcf677f8000) 
+0

我會接受,因爲這是有用的信息。但是,對於我來說,爲什麼一個共享庫會設置一些依賴關係而不是其他的,爲什麼共享庫會設置一些依賴項?如果缺少一個依賴關係,他們是如何設法建立它的?假設我決定從源代碼構建一個lib,並且它會生成共享庫,它們是否會包含這個自動鏈接信息,或者這是一些包裝細節? – kodu

+1

@ user1896048即使您不鏈接其依賴庫,也可以構建共享庫。這是因爲缺少的符號僅在構建可執行文件時才被檢查。在構建目標文件時,不會檢查它(庫是目標文件集合)。如果從源代碼構建,那麼如果庫構建系統的創建者負責正確獲取所有鏈接標記。如果他們沒有,你仍然可以手動影響它(通常,取決於所使用的構建系統),通過在LDFLAGS中添加'-l'條目。最後一步可能是Debian軟件包錯過了什麼。 –