1. 程式人生 > >JVM學習——1. win10 下構建64位 openJDK8 完整篇

JVM學習——1. win10 下構建64位 openJDK8 完整篇

     之前面試的時候總是能碰到關於JVM的問題,這次下定決心研究一下。開篇的時候說是要編譯一個openjdk,真不容易,折騰了大約有2-3天,其中走了一些彎路,參考的文章連結見底部,建議不用看他們的了,因為就是參考的太多,反而犯了一些錯誤,耽誤了很長時間,鑽進了思維死角里。廢話少說,上乾貨。     

     編譯環境說明

  1. win10
  2. cygwin 64位最新版本,別太舊就行
  3. freetype 2.7
  4. vs2010
  5. openjdk8
  6. JDK 7 (本地機器安裝)

    以上安裝軟體全部提供下載啦(都是官網下載的)。連結:https://pan.baidu.com/s/10iD2e7LhtQTPolGVUdOGgg 密碼:yjqh

軟體安裝

首先安裝cygwin:這個是模擬Linux環境的軟體,相當於一個虛擬機器,主要編譯工作在這裡進行。

以下幾類package是必須要安裝的。

Binary NameCategoryPackageDescription
ar.exeDevelbinutilsThe GNU assembler, linker and binary utilities
make.exeDevelmakeThe GNU version of the ‘make’ utility built for CYGWIN
m4.exeInterpretersm4GNU implementation of the traditional Unix macro processor
cpio.exeUtilscpioA program to manage archives of files
gawk.exeUtilsawkPattern-directed scanning and processing language
file.exeUtilsfileDetermines file type using ‘magic’ numbers
zip.exeArchivezipPackage and compress (archive) files
unzip.exeArchiveunzipExtract compressed files in a ZIP archive
free.exeSystemprocpsDisplay 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

感謝!