1. 程式人生 > >win10-x64系統下編譯OpenJDK

win10-x64系統下編譯OpenJDK

win10-x64系統編譯OpenJDK

目錄

本文主要講解在win10環境下編譯OpenJDK遇到的問題和解決辦法,在此先宣告一下在windows系統上編譯OpenJDK會遇到一些很坑的問題,如果不介意系統的話還是推薦在Linux上編譯。
如果您非要使用windows編譯OpenJDK,那麼我建議裝軟體的時候一定要裝英文版,否則會出現一些很奇葩的問題。好了接下來讓我們開啟編譯OpenJDK之旅吧。

下載OpenJDK原始碼

首先我們需要下載OpenJDK原始碼,這裡的版本選擇編譯OpenJDK8,我在編譯7的時候總是報錯,看提示像是類庫版本不相容,換了8就沒有這個問題。
下載OpenJDK原始碼有兩種方式

  • 通過版本控制器Mercurial下載
  • 直接下載zip原始碼包

這裡我們選擇比較簡單的第2種,點選OpenJDK8原始碼壓縮包下載原始碼包並解壓到本地。

配置編譯環境

使用windows編譯最麻煩的地方就在於編譯環境的搭建,環境搭建有很多方法,但是基本思路都是一樣,就是在windows上模擬linux,一般在win系統上有兩種軟體可以完成這類的需求,cygwin和mingw,這裡我們選擇cygwin。
進入到剛才解壓的OpenJDK目錄,點選README-builds.html。這個檔案是官方出品的編譯OpenJDK的教程,裡面涉及到幾種不同的系統,由於我們是在windows下進行編譯,因此只關注其中和windows相關的部分。

安裝cygwin

為了模擬linux,需要安裝cygwin,點選cygwin安裝包下載當前最新的版本,點選安裝即可,根據官方的安裝簡介,以下幾類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

在安裝完這些package後,編譯過程中還是報了一個找不到cmp的錯,感覺是這個列表少了一項,通過搜尋資料發現缺少diffutils包,安裝diffutils包即可。
安裝介面

安裝編譯器

官網推薦的編譯器為Visual Studio 2010 Compilers,下載安裝 Microsoft Visual Studio C++ 2010 (VS2010) Professional Edition or Express compiler即可。注意這裡最好安裝英文版,如果安裝中文版後面會遇到很多問題,如果您一定要安裝中文版,做好後面各種報錯的準備(博主安裝的就是中文版被它虐的不行)。

安裝freetype

關於freetype這塊官方的編譯教程中並沒有提及,因此在這吃了不少虧。由於字型的原因需要用到freetype,如果是32位的系統網上可以找到已經編譯好的二進位制檔案。我的系統是64位因此自己用VS2010編譯了一個freetype。點選freetype下載原始碼並解壓。將工程匯入VS2010選擇Release Multithreaded和x64版本使用快捷鍵F7進行編譯。在編譯OpenJDK環境配置這一步一直報錯,最後是通過檢視它的shell程式碼才找到了原因。這裡我們不僅需要dll檔案還需要lib檔案,都是用同一個工程編譯出的只是字尾不太一樣。可以通過在專案上右擊點屬性檢視當前編譯的二進位制檔案是什麼格式的,如下圖:
檢視編譯屬性
我電腦上預設的是編譯成dll檔案,如果要編譯成lib檔案修改目標副檔名和配置型別為.lib重新編譯即可。
編譯完後在C盤下新建freetype目錄,並且在該目錄分別建立兩個子目錄名字為include和lib,子目錄的名字不能變否則後面檢查編譯環境的時候會通不過。將dll和lib檔案放到lib目錄,同時將freetype原始碼include目錄下的ft2build.h放到include目錄下。

configure檢測編譯環境

進入cygwin bash環境,cd切換到openjdk目錄執行bash ./configure –with-freetype=/cygdrive/c/freetype –enable-debug –with-target-bits=64
解釋一下這個命令的含義,–with-freetype指定freetype的目錄,如果不指定會去C:\Program Files\GnuWin32目錄下查詢,後面兩個編譯選項指定要編譯出64位的debug版本。
如果cygwin安裝的是2.X的版本則在編譯的過程中會報cygwin的版本太老,這是檢測指令碼的一個bug,該指令碼在common/autoconf目錄下使用文字編輯器開啟generated-configure.sh搜尋Your cygwin is too old,關注7220行原來是1.7這裡我根據自己的cygwin版本改成了2.6。

關於freetype的坑,首先64系統需要freetype 64的版本前面我們自己編譯了已經,實際上我在編譯OpenJDK的時候這塊一直報錯找不到合適的freetype,最後通過修改編譯指令碼增加日誌才找到原因:

可以看到指令碼會先判斷freetype下include目錄是否存在ft2build.h檔案,滿足該條件後才會繼續搜尋freetype.lib和freetype.dll。
如果你用的是VS中文版編譯器那麼很不幸,在編譯過程中會報Target CPU mismatch,這是由於在執行CL.exe獲取編譯版本的時候由於輸出是中文的原因會導致獲取不到,我們只要註釋掉相關檢查邏輯即可,註釋如下:

相關的檢查邏輯不止一處,類似上圖全部註釋即可。
踩到的坑全都解決後執行make all會把包括JVM、JDK包括在內的原始碼全部編譯一遍,整個過程大概耗時80分鐘。編譯完的結果儲存在openjdk\build\windows-x86_64-normal-server-fastdebug中。

將hotspot工程匯入到Visual Studio

如果想debug hotspot我們可以按照以下步驟將原始碼匯入到VS中。

  • 首先開啟cmd命令視窗進入hotspot\make\windows目錄
  • 找到VS安裝的目錄,進入VC\bin\amd64複製vcvars64.bat批處理的全路徑
  • 在cmd中執行vcvars64.bat建立vc工程的匯出環境
  • 執行create openjdk\build\fastdebug\images\j2sdk-image指定剛才編譯好的jdk路徑並建立VS工程
  • 進入到hotspto\build目錄下會看到匯出的工程,用VS匯入即可

    F7編譯後就可以debug了。

相關推薦

win10-x64系統編譯OpenJDK

win10-x64系統編譯OpenJDK 目錄 本文主要講解在win10環境下編譯OpenJDK遇到的問題和解決辦法,在此先宣告一下在windows系統上編譯OpenJDK會遇到一些很坑的問題,如果不介意系統的話還是推薦在Linux上編譯。

win10系統怎麽設置網頁的字體變大

get more light pst title targe 系統 blank dsa 對於 EDGE 瀏覽器: 點擊右上角的設置圖標(三個小點)——縮放,點擊 + 號放大字體。 本回答由提問者推薦 win10的系統下怎麽設置網頁的字體變大

Linux系統編譯VLC for Android

操作步驟: 1、下載最新版本的Linux版jdk,將下載好的檔案解壓到/usr/android目錄下 tar zxvf jdk-10.0.2_linux-x64_bin.tar.gz 2、設定環境變數 使用sudo vi /etc/profile命令編輯環境

Streamer輻射傳輸模型在Win10 64bit系統編譯使用

終於接觸輻射傳輸模型了,開始定量遙感之旅~ 不過萬事開頭難o(╥﹏╥)o,首先解決軟體的執行問題: 簡介 Streamer是用來計算在各種大氣和表面條件下輻射率(輻射強度)和輻照度(輻射通量)的輻射傳輸模型。通過與其他輻射傳輸模式的比較[1] ,Streamer

sublime在linux系統編譯C++的sublime.build檔案

{     "shell_cmd": "g++ -std=c++11 \"${file}\" -o \"${file_path}/${file_base_name}\"",     "file_rege

64位系統編譯32位的彙編程式

最近重新開始看彙編的書,但是依然還是以前的問題,沒法用popl和pushl(以前是乾脆用的popq以及pushq),但是感覺用起來麻煩,特別對照書看,那麼 在網上搜索了一下發現果然有類似的部落格 先是彙編 as --32 -o powers.o powers.s 然後連結

在64位系統編譯32位彙編程式

#只是例子,計算2^3 + 5^2 .code32 .section .data .section .text .globl _start _start: pushl $

Win10+VS2015環境編譯 OpenCV 3.1和opencv_contrib

一、下載安裝 下載以上內容並安裝opencv和cmake-gui,我的OpenCV安裝路徑為 D:\OpenCV3.1 二、Cmake 做到後面才發現x86和x64的庫生成需要在Configu

Linux編譯openJDK原始碼

學習《深入理解java虛擬機器》,開篇先編譯一個openJDK來了解JDK的原始碼。 書本你上提供了Mac OS和Linux系統下編譯openJDK的方法步驟,並且在windows系統下編譯openJDk也十分麻煩。 於是我就自己安裝了一個Linux系統的虛

在ubuntu系統編譯ffmpeg的靜態庫

在ubuntu上配置ffmpeg的開發環境,參考:http://blog.csdn.net/leechee_1986/article/details/41891119 到ffmpeg官網下載ffmpeg的原始碼,解壓,編譯 ./configure --enable-gpl

OpenSSL 1.1.1a 在Windows系統編譯全過程

一、安裝前的準備 OpenSSL 原始碼一份 :https://www.openssl.org/source/ virtual studio 2017 (或者其他版本 這裡我使用的是vs2017) nasm https://www.nasm.us perl https://www.activestat

教你如何在Mac系統編譯Android系統的原始碼

今日科技快訊 “全國公廁雲平臺”11月19日上線試執行,彙總全國近33萬條公廁資訊,初步實現快速尋廁功能。11月19日是“世界廁所日”。據瞭解,該平臺由住房和城鄉建設部組織研發,群眾可隨時隨地

Centos 6.5 X64 環境編譯 hadoop 2.6.0 --已驗證

詳細參照原始碼路徑下的BUILDING.txt檔案 Centos 6.5 x64 hadoop 2.6.0 jdk 1.7 protobuf-2.5.0 maven-3.0.5 set environment export JAVA_HOME=/home/linux/jdk export

深入理解java虛擬機器之一window編譯OpenJDK環境搭建

最近在看java JVM的編譯原理,才來研究這些。在window下搭建編譯OpenJDK的環境,真的很蛋疼,不信的人可以試試。 環境構建需要的工具 1.cygwin 工具。這個工具的主要用處是為了在window平臺上模擬出一個unix虛擬環境。

VS2013 X64環境編譯zlib

最近在學習zlib,特將自己的編譯過程記錄下來,以供查閱。1.原始碼下載zlib sourcecode, version 1.2.11, tar.gz format解壓到D:\tools\zlib-1.2.112.編譯(1)在開始目錄中開啟VS2013的VS2013 x64

win10系統怎麼刪除linux系統,同時改回windows載入程式

   首先說明一下此方法的一些前提:這個方法是由於easyBCD和mbrFix無法成功修復啟動引導的情況下進行的嘗試,通常easyBCD和mbrFix可以修復win10以前的windows系統的啟動引導問題,就是以前的電腦,但是現在的電腦使用了EFI,導致easyBCD無法工

在Linux系統編譯並執行C++程式

引言 為什麼要在Linux下寫程式? 首先要問一下自己,為什麼要寫這個程式。 如果我們寫一個執行在windows平臺的應用程式,那麼用Linux寫肯定是傻瓜或者強迫症,因為在windows平臺除錯windows程式可以更容易發現並解決問題,反過來也一樣,在

Windows系統編譯智慧合約常見的初級錯誤

相信很多朋友在初學以太坊時會從智慧合約的程式設計開始學起,下面給出了幾個在windows系統下編寫合約的幾個常見問題的解決方法,希望對大家有所幫助(以下問題的測試編譯軟體為Atom)。 Error1,ParserError: Expected pragma, impor

IMX6平臺Linux3.14.28系統編譯驅動模組ko和應用程式的Makefile模版

obj-m += button.oARCH=armMYCROSS_COMPILE=/opt/poky/1.7/sysroots/x86_64-pokysdk-linux/usr/bin/arm-poky-linux-gnueabi/arm-poky-linux-gnueabi

win10系統vs2015+opencv3.4.3+cmake編譯opencv-contrib3.4.3

最近在研究KAZE演算法,發現我使用的opencv2.4.8中沒有整合KAZE演算法,網上查詢該演算法在opencv3版本中有,故將opencv和vs解除安裝重灌,我安裝的是opencv3.4.3+vs2015,一切配置完之後,發現KAZE演算法是可以用了,但SIFT/SURF演算法又出錯,