JVM學習——1. win10 下構建64位 openJDK8 完整篇
編譯環境說明
- win10
- cygwin 64位最新版本,別太舊就行
- freetype 2.7
- vs2010
- openjdk8
- JDK 7 (本地機器安裝)
以上安裝軟體全部提供下載啦(都是官網下載的)。連結:https://pan.baidu.com/s/10iD2e7LhtQTPolGVUdOGgg 密碼:yjqh
軟體安裝
首先安裝cygwin:這個是模擬Linux環境的軟體,相當於一個虛擬機器,主要編譯工作在這裡進行。
以下幾類package是必須要安裝的。
Binary Name | Category | Package | Description |
---|---|---|---|
ar.exe | Devel | binutils | The GNU assembler, linker and binary utilities |
make.exe | Devel | make | The GNU version of the ‘make’ utility built for CYGWIN |
m4.exe | Interpreters | m4 | GNU implementation of the traditional Unix macro processor |
cpio.exe | Utils | cpio | A program to manage archives of files |
gawk.exe | Utils | awk | Pattern-directed scanning and processing language |
file.exe | Utils | file | Determines file type using ‘magic’ numbers |
zip.exe | Archive | zip | Package and compress (archive) files |
unzip.exe | Archive | unzip | Extract compressed files in a ZIP archive |
free.exe | System | procps | Display amount of free and used memory in the system |
如圖,預設都是default,選擇需要必須要安裝的點選那個如重新整理的按鈕,切換成install。我選擇的ALL Install,裝了多長時間我不知道,我是點完下一步就下班走人了,哈哈。
將cygwin的安裝路徑下bin目錄配置到環境變數path中,如我的安裝路徑為:E:\DevTools\Cygwin\cygwin_install\bin
安裝VS2010,這個安裝過程我就省略了,但是要注意的是,安裝路徑不要有空格,因為以後你會用到它......
將下載的freetype2.7解壓。如解壓至E:\freetype-2.7
接下來介紹通過vs2010編譯64位的freetype-2.7,至於freetype是幹嘛的,請童鞋們自行百度搜索。
編譯Freetype
為照顧沒有使用過vs的同學,介紹一下編譯的具體過程,第一次開啟vs2010的話,選擇使用VC++,選擇file-->open-->project/solution...,找到你解壓freetype的路徑 ,如我的E:\freetype-2.7\builds\windows\vc2010\freetype.sln
開啟後,右鍵專案,選擇properties,如圖
由於我們想編譯64位的openjdk,所以我這裡需要64位的,在編譯之前的檢查中,我們不僅需要dll檔案還需要lib檔案,都是用同一個工程編譯出的只是字尾不太一樣。編譯兩次的時候只需要修改vs2010的配置字尾就OK了,注意在vs2010的配置選中,選擇X64的,編譯的時候,請右鍵專案,build,請同學們注意下圖:
編譯freetype.lib:
編譯freetype.dll
兩個檔案編譯完成後,編譯的檔案在目錄:E:\freetype-2.7\objs\vc2010\x64
然後咱們在E:\freetype-2.7目錄下建立lib資料夾,並將編譯好的freetype.dll和freetype.lib複製到該目錄。
在編譯openjdk之前會校驗並用到freetype下的include資料夾下的ft2build.h和lib資料夾下的freetype.dll和freetype.lib檔案。(後面會說到編譯前的校驗,會提到使用這幾個檔案的地方)
然後還需要設定一下freetype的環境變數,FREETYPE_CFLAGS=E:\freetype-2.7\include;FREETYPE_LIBS=E:\freetype-2.7\lib,可以嘗試直接設定在path中。如圖:
編譯openjdk
開啟cygwin,切換到解壓的openjdk_8的資料夾根目錄,如:
執行命令
bash ./configure -with-freetype=/cygdrive/e/freetype-2.7 -enable-debug -with-target-bits=64
-with-freetype引數是使用指定的freetype,-enable-debug是編譯可除錯的openjdk,-with-target-bits=64,是指編譯64位的
然後就默默祈禱一切順利吧,此時先開始了一些列的編譯檢查,你可以用文字編輯器看一下openjdk下面的configure的內容,它實際上指向了這個檔案,E:\DevTools\openjdk\common\autoconf\generated-configure.sh,你可以發現這個檔案中的各種編譯前的校驗
如果你看到下面這張圖,congratulations,校驗通過,可以真正的編譯openjdk了
在校驗階段往往存在的坑有好幾個,我這裡只列舉我碰到的,其他請參考別人的文章,
首先補充一下在win系統下需要freetype檔案的校驗問題,如果不設定freetype的路徑,預設它會去C:\Program Files\GnuWin32路徑下去找,如下圖:
在編譯過程中可能會報Target CPU mismatch,那是因為你用的中文版的VS2010編譯的freetype的問題,我的使用的英文版的vs2010,沒有出現這個問題,如果有請找到如下圖的位置,進行遮蔽(可能有好幾處,請自行搜尋檢查),
在編譯過程中報如下的錯誤,請按圖在generated-configure.sh檔案中找到對應的資訊進行遮蔽即可。
configure: Your cygwin is too old. You are running 2.10.0(0.325/5/3), but at least cygwin 1.7 is required. Please upgrade.
configure: error: Cannot continue
configure exiting with result code 1
在編譯的過程中遇到的錯誤,你都可以根據錯誤資訊在generated-configure.sh檔案中進行搜尋,看一看是哪個位置出現的錯誤,然後再思考解決的辦法。
因為我參考了一篇專門編譯freetype的文章,按照文章修改了一個.h的標頭檔案,然後編出來的freetype.dll和freetype.lib在校驗的時候總是報不是64位的,其實是檔案應該有錯誤,所以不能進行編譯,後來換了英文版的vs2010,開啟工程什麼檔案都沒有修改,直接設定了一下編譯的配置,然後build出來檔案就沒有問題,在這個問題上糾結了一段時間,都是淚~~~。
接下來應該都編譯通過,你可以通過make all命令進行下一步的工作,編譯完的結果在E:\DevTools\openjdk\build\windows-x86_64-normal-server-fastdebug中。
參考文章:
https://blog.csdn.net/tangyongzhe/article/details/53576097
https://blog.csdn.net/yapingxin/article/details/51841039
https://blog.csdn.net/LPWSTR/article/details/78849587
感謝!