在清華BBS上看到有些朋友在 FreeBSD 4.0 Release上編譯MySQL時(shí)通不過,停留在編譯sql/sql_yacc.cc文件處,很長(zhǎng) 時(shí)間都通不過,有網(wǎng)友說編譯了三個(gè)多小時(shí)都通不過,我真的很佩服他的耐心了。我也 遇到了同樣的問題,還有過錯(cuò)誤的判斷。通過與清華BBS的網(wǎng)友交流,我相信找到了問題 所在。
有網(wǎng)友說用ports安裝就沒有什么問題,但并沒有進(jìn)一步說明 到底是因?yàn)槭裁础?戳艘幌聀orts中對(duì)mysql-server的說明,原來用ports編譯mysql需要 一個(gè)包:libtool-1.3.3。
請(qǐng)看FreeBSD對(duì)libtool這個(gè)包的描述
This is GNU Libtool, a generic library support script. Libtool hides the complexity of using shared libraries behind a consistent, portable interface.
To use libtool, add the new generic library building commands to your Makefile, Makefile.in, or Makefile.am.
這是GNU Libtool,通用的庫(kù)支持腳本。Libtool 用一致的方便的接口隱藏了使用共享庫(kù)的復(fù)雜性。(蹩腳的翻譯)要使用libtool,將新的通用庫(kù) 編譯命令加入Makefile,Makefile.in,或Makefile。am中。
使用ports安裝需要先安裝libtool-1.3.3這個(gè)包,但是不用ports安裝, 直接編譯也需要么?實(shí)驗(yàn)證明是不需要的,在沒有安裝libtool包的情況下直接編譯mysql也可以通過, 只是停留在編譯sql_yacc.cc這個(gè)文件的時(shí)間非常長(zhǎng),一般人都會(huì)覺得編譯出了問題而中斷編譯過程。 如果你耐心等待,并且有足夠的內(nèi)存和交換分區(qū),應(yīng)該是可以編譯通過的。
如果在編譯sql_yacc.cc的時(shí)候出現(xiàn)了下面的錯(cuò)誤:
Internal Compiler error: program cc1plus got fatal signal 11或
Out of virtual memory或
virtual memory exhausted
該問題是gcc要求大量的內(nèi)存編譯帶有嵌入函數(shù)(inline function)的sql_yacc.cc, 而系統(tǒng)內(nèi)存和交換分區(qū)不足,那么可以使用./configure --with-low-memory重新配置,再進(jìn)行編譯。
如果你正在使用gcc,該選項(xiàng)使得將-fno-inline加到編譯行,如果你正在使用 其他的編譯器,則加入-O0。即使你有特別多的存儲(chǔ)器和交換空間,也應(yīng)該試一試--with-low-memory 選項(xiàng)。
我通過測(cè)試表明,使用--with-low-memory顯著的降低了編譯時(shí)間,而用ports安裝時(shí), ports中的patch將-O0加入了Makefile,不使用--with-low-memory也同樣可以快速的編譯完成。
其實(shí),F(xiàn)reeBSD 4.0 Release的ISO安裝盤中有mysql的二進(jìn)制安裝包, 不用編譯,pkg_add就ok了,何必如此麻煩呢?
聲明:本網(wǎng)頁(yè)內(nèi)容旨在傳播知識(shí),若有侵權(quán)等問題請(qǐng)及時(shí)與本網(wǎng)聯(lián)系,我們將在第一時(shí)間刪除處理。TEL:177 7030 7066 E-MAIL:11247931@qq.com