Fw: [問題] 關於 dev lib 手動安裝的問題

看板Linux作者 (gowrite)時間3年前 (2021/08/12 06:48), 3年前編輯推噓6(6031)
留言37則, 6人參與, 最新討論串1/1
※ [本文轉錄自 LinuxDev 看板 #1X55DFly ] 作者: gowrite (gowrite) 看板: LinuxDev 標題: [問題] 關於 dev lib 手動安裝的問題 時間: Thu Aug 12 06:46:37 2021 各位好, 最近在學習用一些套件跟軟體,在安裝階段想到了一個問題, 就是我們在用這些別人寫好的軟體的時候, 常常需要安裝一些 libxxxx-dev 之類的 dev library, 因為這些軟體當初在開發期間也有用到這些程式, 這時候通常就會使用 apt 的方式來安裝這些 library 在 apt 把這些 library 安裝在系統之後, 我想知道這些 library 主要是安裝在哪?並且安裝了什麼東西? 這時候我就有了一些疑問 舉例: 系統告訴我,要編譯 gnupg (gpg) 時,我需要安裝 libassuan library, 所以我找了 apt-get 上面的 libassan-dev 這個 library, 安裝之後, 我發現他在我系統的 /usr/bin/ 裝了 config 檔 /usr/include 裝了 header /usr/lib/x86_64-linux-gnu 裝了 靜態檔、動態檔 /usr/lib/x86_64-linux-pkgconfig 裝了 pkg-config 檔 /usr/share 裡面裝了 m4 檔,文件檔,一些 copyright 文件,及 manual 我想問的是,如果今天沒有 apt-get 幫我們自動安裝這些 library 的話, 我們自己下載 libassuan 回來之後, 要怎麼把什麼東西放在哪個目錄下? 還是說,基本上沒辦法知道, 只能使用 autogen.sh,然後 configure 之後, 就是直接用 make 讓他自己去塞檔案到系統裡面? 我們從 apt-get install 的 libxxx-dev, 跟我們自己下載 tar 檔案,直接 make 安裝的結果, 是一樣的嗎? 這邊請高手、前輩們解惑一下, 謝謝 -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 111.255.11.60 (臺灣) ※ 文章網址: https://www.ptt.cc/bbs/LinuxDev/M.1628721999.A.BFC.html ※ 編輯: gowrite (111.255.11.60 臺灣), 08/12/2021 06:48:09 ※ 發信站: 批踢踢實業坊(ptt.cc) ※ 轉錄者: gowrite (111.255.11.60 臺灣), 08/12/2021 06:48:20

08/12 08:21, 3年前 , 1F
研究一下 GNU autotools 到底是在幹什麼事。
08/12 08:21, 1F

08/12 08:54, 3年前 , 2F
cc/ld如果沒有指定header/library的path,會自動去系統內
08/12 08:54, 2F

08/12 08:55, 3年前 , 3F
建的header/lib目錄搜尋,所以只要掌握放內建搜尋目錄或自
08/12 08:55, 3F

08/12 08:55, 3年前 , 4F
行指定搜尋目錄即可正常編譯/連結這個精神,你可以選擇看
08/12 08:55, 4F

08/12 08:56, 3年前 , 5F
是要放內建搜尋目錄或自行指定搜尋目錄. 另外套件包的說
08/12 08:56, 5F

08/12 08:57, 3年前 , 6F
明文件通常也會告訴你該放哪,缺文件的情況make install之
08/12 08:57, 6F

08/12 08:57, 3年前 , 7F
類的target也會透露放的位置
08/12 08:57, 7F

08/12 09:17, 3年前 , 8F
dpkg -L libxxx-dev
08/12 09:17, 8F
感謝大家的回答, 我想問另外一個問題,就是所謂的 dev library 有所謂標準的作法嗎? 也就是應該有哪些檔案,應該放到哪些目錄? 這些有標準,或者是 common style or convention 嗎? 謝謝 ※ 編輯: gowrite (111.255.11.60 臺灣), 08/12/2021 14:20:37

08/12 14:24, 3年前 , 9F
dev 裡面只有包 header、pkg-config、libxxx.so 的
08/12 14:24, 9F

08/12 14:24, 3年前 , 10F
symbolic link
08/12 14:24, 10F

08/12 14:25, 3年前 , 11F
編譯、開發才需要的東西才放 -dev,這不難判斷吧
08/12 14:25, 11F

08/12 14:28, 3年前 , 12F
大部分 distro 下 configure 都會掛 --prefix=/usr
08/12 14:28, 12F

08/12 14:28, 3年前 , 13F
--libdir=/usr/lib/{ARCH} 之類的
08/12 14:28, 13F

08/12 14:29, 3年前 , 14F
你想自己包也可以 configure 照下,然後
08/12 14:29, 14F

08/12 14:30, 3年前 , 15F
make DESTDIR=/path/to/install 把東西裝到打包的 prefix
08/12 14:30, 15F

08/12 14:30, 3年前 , 16F
^install
08/12 14:30, 16F

08/12 14:31, 3年前 , 17F
這樣你就可以在真的裝進系統前知道到底會裝什麼
08/12 14:31, 17F

08/12 14:32, 3年前 , 18F
distro 包的跟從 upstream 載下來的不見得會一樣
08/12 14:32, 18F

08/12 14:33, 3年前 , 19F
不過同版本的就算有 patch 過 API/ABI 通常是不會變
08/12 14:33, 19F

08/12 14:42, 3年前 , 20F
linux 慣例是放 /usr/local/lib 之類的,參考 hier(7)
08/12 14:42, 20F

08/12 15:33, 3年前 , 21F
這是有彈性的,可以在 link 的時候指定 rpath 去找
08/12 15:33, 21F

08/12 15:34, 3年前 , 22F
lib,也可以經由 LD_LIBRAY_PATH 變數讓程式去找 lib
08/12 15:34, 22F

08/12 20:09, 3年前 , 23F
不是很清楚原 po 的問題的目的?要不要自行走一遭?
08/12 20:09, 23F

08/12 20:11, 3年前 , 24F

08/12 20:12, 3年前 , 25F
你用 apt,所以應是 Debian 系的。從他的框架,裡頭
08/12 20:12, 25F

08/12 20:13, 3年前 , 26F
會有你需要的答案。但沒必要被框架框住。
08/12 20:13, 26F

08/21 16:39, , 27F
就發行版套件打包的概念,你爽要設定自己的 prefix 也
08/21 16:39, 27F

08/21 16:40, , 28F
可以,不要跟其他安裝好的套件衝突到就好。
08/21 16:40, 28F

08/21 16:42, , 29F
/usr/local 那種是手動編譯用 root 安裝才會出現的東東
08/21 16:42, 29F

08/21 16:43, , 30F
(在 Linux) 不建議在需要長期維運的環境下,把一坨套件
08/21 16:43, 30F

08/21 16:43, , 31F
全都 sudo make install 塞進那邊
08/21 16:43, 31F

08/21 16:44, , 32F
那樣很噁
08/21 16:44, 32F

08/21 22:24, , 33F
最近才剛有人把他們的系統拿給我看,/usr/local 亂裝一堆
08/21 22:24, 33F

08/21 22:25, , 34F
東西,結果系統搜尋函式庫時優先找 /usr/local/lib,導致
08/21 22:25, 34F

08/21 22:26, , 35F
各種程式使用到 /usr/local/lib 中版本不合的函式庫,最
08/21 22:26, 35F

08/21 22:27, , 36F
後連開機都有問題。
08/21 22:27, 36F

08/22 03:15, , 37F
08/22 03:15, 37F
文章代碼(AID): #1X55ErDF (Linux)
文章代碼(AID): #1X55ErDF (Linux)