GNU Build System

939 views

Published on

開放原始碼自由軟體的標準編譯流程—以Pidgin為例
2011/6/15晚上於WoFOSS第九次聚會

Published in: Technology
0 Comments
0 Likes
Statistics
Notes
  • Be the first to comment

  • Be the first to like this

No Downloads
Views
Total views
939
On SlideShare
0
From Embeds
0
Number of Embeds
20
Actions
Shares
0
Downloads
17
Comments
0
Likes
0
Embeds 0
No embeds

No notes for slide

GNU Build System

  1. 1. 由source到執行檔 開放原始碼自由軟體 標準編譯流程 以 Pidgin 為例 依瑪貓 / 楊士青 <imacat@mail.imacat.idv.tw> 2011-01-19 , 2011-6-15 修
  2. 2. 「由 source 到執行檔」簡報由 依瑪貓╱楊士青 製作, 以 創用CC Attribution-ShareAlike 3.0 Unported 授權條款 釋出。
  3. 3. 標準流程步驟 <ul><li>sudo apt-get install build-essential intltool libavahi-client-dev libavahi-glib-dev libdbus- glib-1-dev libgstfarsight0.10-dev libgstreamer- plugins-base0.10-dev libgtkspell-dev libidn11- dev libmeanwhile-dev libnss3-dev libperl-dev libsasl2-dev libstartup-notification0-dev libxss-dev network-manager-dev tk-dev
  4. 4. ./configure --enable-cyrus-sasl --with-system- ssl-certs=/etc/ssl/certs
  5. 5. make
  6. 6. sudo make install </li></ul>
  7. 7. 編譯: 將source轉成執行檔,方便系統執行。
  8. 8. 標準流程步驟 <ul><li>tar xjf pidgin-2.8.0.tar.bz2
  9. 9. cd pidgin-2.8.0
  10. 10. ./configure
  11. 11. make
  12. 12. make check
  13. 13. sudo make install </li></ul>
  14. 14. 但是,在編譯之前…
  15. 15. 安裝開發用的套件
  16. 16. 安裝開發用的套件 <ul><li>sudo apt-get install build-essential intltool libavahi-client-dev libavahi-glib-dev libdbus-glib-1-dev libgstfarsight0.10-dev libgstreamer- plugins-base0.10-dev libgtkspell-dev libidn11-dev libmeanwhile-dev libnss3-dev libperl-dev libsasl2-dev libstartup-notification0-dev libxss- dev network-manager-dev tk-dev </li></ul>
  17. 17. build-essential 基本需要的編譯程式 gcc, g++, make
  18. 18. *-dev 開發用的套件
  19. 19. 舉例: libxss XScreenSaver營幕保護程式的函式庫 Pidgin引用,來偵測使用者idle的時間
  20. 20. libxss1 執行用的函式庫 /usr/lib/libXss.so.1.0.0
  21. 21. 執行時期連結, 引用到的程式,執行時需要, 所以要執行程式,要一起拉進來。
  22. 22. sudo apt-get install pidgin 會一起拉進 libxss1
  23. 23. libxss-dev 編譯用的定義檔 /usr/include/X11/extensions/scrnsaver.h static函式庫 /usr/lib/libXss.a
  24. 24. 編譯時引用、連結,執行時不會用, 所以只有在編譯時才需要拉進來。 執行時不需要。
  25. 25. apt-get install pidgin 時, 因為安裝的是已編譯好的執行檔, 所以只需要 libxss1 , 不需要 libxss-dev ,
  26. 26. 剩下的就很簡單了
  27. 27. 標準流程 <ul><li>tar xjf pidgin-2.8.0.tar.bz2
  28. 28. cd pidgin-2.8.0
  29. 29. ./configure
  30. 30. make
  31. 31. make check
  32. 32. sudo make install </li></ul>
  33. 33. ./configure 檢查系統設定,作出因應處理。
  34. 34. configure 是 GNU 規定的標準工具, 是 autoconf 製作出來的 shell script 。 GNU的專案,規定要用autoconf。
  35. 35. 因為方便好用,所以非GNU的專案, 也常見使用GNU autoconf。
  36. 36. 使用GNU autoconf configure 的非GNU專案: Apache BIND MySQL PostgreSQL Samba …
  37. 37. ./configure --enable-cyrus-sasl --with-system-ssl-certs=/etc/ssl/certs --enable-cyrus-sasl : 使用 cyrus-sasl 功能 --with-system-ssl-certs : 指定 SSL 憑證目錄( /etc/ssl/certs )
  38. 38. ./configure –-help 查看有哪些可用的選項
  39. 39. 即使不是使用 GNU autoconf 的專案, 也常常使用類似名稱、類似功能的程式, 檢查系統設定,作出因應處理。
  40. 40. Perl 使用 Configure : ./Configure
  41. 41. OpenSSL使用 config : ./config
  42. 42. 一點點深入瞭解GNU autoconf
  43. 43. GNU autoconf由簡易的範本, 來建立強大的 configure 程式。
  44. 44. configure 的範本檔為 configure.ac 。
  45. 45. 除了 configure 以外, autoconf也用範本,製作其他檔案。
  46. 46. autoconf的一般範本檔為 .in 檔尾。 例如: config.h.in => config.h Makefile.in => Makefile
  47. 47. make 編譯,將原始碼轉成執行檔程式。
  48. 48. make 根據 Makefile 的編譯規則編譯。
  49. 49. 前面提到, Makefile 由GNU autoconf, 從 Makefile.in 範本製作而成。
  50. 50. Makefile 中有很多特殊編譯功能。
  51. 51. GNU標準的 Makefile 功能
  52. 52. make check 自我檢查品管。 自我檢查編譯出來的功能是否正確。
  53. 53. sudo make install 安裝。
  54. 54. 要安裝到系統目錄, 所以需要 sudo ,用 root 權限。
  55. 55. sudo make install-strip 安裝同時 strip 。
  56. 56. make clean 清除所有 .o 目的檔、 .a 及 .so 函式庫、 執行檔, 以便全部重新 make 。
  57. 57. make distclean 除了 make clean 外, 移除所有distribution發行檔外的檔, 包括 ./configure 的cache, 以便全新重做 ./configure 。
  58. 58. make dist 產生distribution發行檔。 如: pidgin-2.8.0.tar.gz
  59. 59. make dist-bzip2 產生bzip2的distribution發行檔。 如: pidgin-2.8.0.tar.bz2
  60. 60. make distdir 產生製作distribution發行檔的目錄, 如: pidgin-2.8.0/
  61. 61. 安裝在哪裏?
  62. 62. 預設使用者自己編譯安裝的程式, 都會在 /usr/local 下 /usr/local/bin/pidgin
  63. 63. 比較 /usr/bin/pidgin /usr/local/bin/pidgin
  64. 64. 問題與討論

×