Chinaunix首页 | 论坛 | 博客
  • 博客访问: 25803
  • 博文数量: 6
  • 博客积分: 1400
  • 博客等级: 上尉
  • 技术积分: 70
  • 用 户 组: 普通用户
  • 注册时间: 2008-04-23 17:11
文章分类

全部博文(6)

文章存档

2011年(1)

2009年(5)

我的朋友
最近访客

分类: LINUX

2009-08-19 21:45:08

打造 Arch Linux 的編譯環境

最近在試用 這個同時擁有 pacman 及 abs 套件管理系統的 distro。我是在 VirtualBox 裡安裝的,安裝后第一件事便是編譯 VirtualBox Additions,才發現沒有 make 等一系列的編譯指令。想到 abs 跟 portage 一樣是 port-like 系統,該能自動解決編譯的問題,於是跟著 安裝了 abs。怎料一試之下,情況依然!

斷斷續續的搜尋及發問,3天后得到了。原來要打造 Arch Linux 編譯環境,一是安裝時在 Select Packages 階段選上 devel 一項。如果像我一樣安裝時錯過了,可以用 pacman 這樣安裝:
# pacman -S base-devel

根據 Phrodo_00 的說法, base-devel 不是 package 也不是 metapackage,所以 pacman -Ss 是找不到的,總之# pacman -S base-devel 就對了! 感謝幫過忙的 , , 。

1 意見:

提到...

问一下博主,如果我安装的时候没有选中lib和support,现在想重新安装,应该如何安装呢?谢谢~~希望博主如果有好的解决方法希望能够mail我,我的邮箱:mail(at)alexgao.com 谢谢


======================================================================================打造你自己的ArchLinux編譯環境
作者Lawliet時間於:14:05

前陣子我寫過ArchLinux推廣安裝教學
曾經說過ArchLinux的無縫升級與快速更新等特點
現在我再來簡單介紹一下同樣也很吸引人的ABS



ABS既"Arch Build System",也就是Arch的編譯系統
跟FreeBSD還有Gentoo的ports一樣
ABS提供源碼讓我們可以在本地編譯安裝各種軟體
如此我們可以編譯出針對自己硬體最佳化的操作平台


那要怎麼用呢?
首先我們必須先安裝ABS
sudo pacman -S abs

安裝完我們先編輯abs.conf
sudo vi /etc/abs.conf

如果你有開testing,那你就把testing的禁用去掉
如果沒有就保持禁用,如下:
REPOS=(core extra community !testing)

安裝完後,我們必須取得"目錄樹"(ABS Tree)
sudo abs

然後ABS會將取得的PKGBUILD存放在/var/abs底下
目錄結構會按照源裡的分類,如testing、core、extra等


接下來就是要找到你想要編譯的套件了!
接著我們來安裝懶人工具,幫助你尋找你要的套件位置
sudo pacman -S pkgfile


裝完之後,假設我要來找Firefox的PKGBUILD
只需要在終端底下敲入:
[lawliet@Archi ~]$ pkgfile firefox
extra/firefox

它就會返回這樣的一個訊息
照著這個位置去找就可以取得firefox的PKGBUILD了
然後你就可以直接makepkg編譯打包了!



通常Arch內建的編譯參數都比較鬆
你可以根據自己的機器做些調整,獲得最大的性能
這裡先編輯/etc/makepkg.conf
sudo vi /etc/makepkg.conf

這個參數是我自己的,這裡僅供參考,使用AMD處理器的人應該略過!
其它處理器的參數查詢可以參照,內有詳細的清單
CHOST="i686-pc-linux-gnu"
CFLAGS="-march=core2 -O3 -msse -msse2 -msse3 -pipe -fomit-frame-pointer"
#CFLAGS="-march=core2 -O2 -pipe -fomit-frame-pointer"
#CFLAGS="-march=prescott -O3 -pipe -fomit-frame-pointer"
#CFLAGS="-march=prescott -O2 -pipe -fomit-frame-pointer"
#CFLAGS="-march=i686 -O3 -pipe -fomit-frame-pointer"
#CFLAGS="-march=i686 -O2 -pipe -fomit-frame-pointer"
CXXFLAGS="${CFLAGS}"
#LDFLAGS="-W1,O1,--as-need"

然後找到MAKEFLAGS="-j3"
這裡是使用的處理契核心數量
"通常都是核心數再+1"
如果你是雙核心那就是-j3
四核心就是-j5



再來如果你跟我一樣是重度編譯者,經常反覆編譯同一個套件
例如Firefox我一天大約需要編譯五到十次不等
其它這類需要經常編譯的東西例如git或svn這類每天或兩天兩頭就一個版本的套件
我們可以使用這個套件進行加速編譯的動作

ccache,它可以把"再次編譯"的速度
提高五到十倍左右,也就是原本需要編譯兩個鐘頭的套件
使用ccache後,再次編譯它最快只要12分鐘而已!
加速非常明顯,強烈建議經常需要編譯同一個套件的人使用,效果非常明顯!


安裝ccache:
sudo pacman -S ccache

編輯makepkg.conf
sudo vi /etc/makepkg.conf

找到這段,並去掉禁用
BUILDENV=(fakeroot !distcc color !ccache !xdelta)


不管你是要二進制還是編譯
在ArchLinux進行這些動作都非常方便!

接下來稍微說一下gcc的編譯與版本切換
為什麼要切換gcc的版本呢?
因為有的時候我們可能會遇到gcc自己本身的問題
造成源碼編譯不過去,或者是源碼本身就不嚴謹
因為容錯過寬或太窄導致編譯到最後很容易會出現問題
所以一般經常編譯的人都會準備兩個版本以上的gcc

像我自己就經常在gcc 4.4.1跟gcc 4.5之間作切換
就我的編譯經驗,gcc 4.5或許不能比gcc 4.4.1提高多少性能
但gcc 4.5卻能把不少gcc 4.4.1編譯不過去的都編譯完成
不過gcc 4.5還在開發中,建議不要用它來編譯核心或是系統重要套件!

一般來說gcc應該保持穩定,同樣一份源碼的gcc用-O3跟-O2對結果會有很大的不同
我一開始以為用-O3可以加快不少編譯速度,事實上編譯速度確實是提高不少
但是編譯出來的東西幾乎不太能用,不穩定或根本無法執行!
後來自己重編穩定版本後才發現原來是參數的問題!

另外在本機編譯新版gcc通常需要編譯兩次
例如我用gcc 4.4編譯gcc 4.5,然後安裝gcc 4.5
再用gcc 4.5再編譯一次gcc 4.5,這樣子新版本的gcc才能發會自己的特性
而不會受限於舊版gcc所造成的特性無法發揮或不正常發揮等問題!



gcc版本切換方法:

查詢當前gcc版本
[lawliet@Arch]$ gcc -v
使用內建 specs。
目的:i686-pc-linux-gnu
配置為:../configure --prefix=/usr --enable-shared --enable-languages=c,c++,fortran,objc,obj-c++ --enable-threads=posix --mandir=/usr/share/man --infodir=/usr/share/info --enable-__cxa_atexit --disable-multilib --libdir=/usr/lib --libexecdir=/usr/lib --enable-clocale=gnu --disable-libstdcxx-pch --with-tune=generic
執行緒模型:posix
gcc version 4.4.1 (GCC)

我的做法通常會將目前gcc版本做個備分
cd /usr/bin

調出有gcc檔名的檔案
[lawliet@Arch bin]$ ls -l gcc*
lrwxrwxrwx 1 root root 13 2009-08-07 14:00 gcc -> gcc-4.4
-rwxr-xr-x 1 root root 209932 2009-07-03 04:44 gcc-4.4
-rwxr-xr-x 3 root root 212480 2009-08-06 20:02 gcc-4.5
-rwxr-xr-x 1 root root 16058 2009-07-24 10:26 gccbug
-rwxr-xr-x 1 root root 16141 2009-08-06 20:02 gccbug-4.5

備份當前gcc版本
sudo cp gcc gcc-bak

把gcc連結到新版gcc上
sudo ln -s gcc-4.5 gcc

檢查是否正確連結
[lawliet@Arch bin]$ gcc -v
使用內建 specs。
目的:i686-pc-linux-gnu
配置為:../configure --prefix=/usr --enable-shared --enable-languages=c,c++ --enable-threads=posix --mandir=/usr/share/man --infodir=/usr/share/info --enable-__cxa_atexit --disable-multilib --libdir=/usr/lib --libexecdir=/usr/lib --enable-clocale=gnu --disable-libstdcxx-pch --with-tune=generic --disable-werror --enable-checking=release --program-suffix=-4.5 --enable-version-specific-runtime-libs
執行緒模型:posix
gcc version 4.5.0 20090723 (experimental) (GCC)

之後如果需要換到其它版的gcc,一樣修改gcc連結既可

HEMiDEMiTechnoratiDel.icio.usMyShare個人書籤Yahoo

1 回應:

Nigel提到...

錯字:
「前鎮子」
「為蛇麼」
另外,為甚麼旁邊是PCBSD的廣告?我只是有點好奇,沒別的意思:P

阅读(1673) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~