在Windows上構建OpenJDK

通過做一些實驗,我發現手頭提供JDK源代碼來進行一些更改,使用它等等通常很有用。因此,我決定下載并編譯該野獸。 顯然,這花了我一些時間,盡管我最初的想法是,它應該和運行make命令一樣簡單:)。 您可能會猜到,我發現這不是一項微不足道的任務,并且為了簡化以后的生活,保留一些有關我正在做的事情的記錄將非常有用。

以下是我要做的步驟。 我認為計算機已經安裝了Visual Studio 2010。 我覺得Express版本應該可以正常工作,但是我還沒有嘗試過。

  1. 安裝cygwin。 確保已安裝此處列出的所有軟件包,其中一些默認情況下未安裝。 以防萬一,這是該表的副本,但建議與主源進行驗證:
    二進制名稱 類別 描述
    可執行文件 開發 Binutils GNU匯編器,鏈接器和二進制實用程序
    制作工具 開發 使 為CYGWIN構建的'make'實用程序的GNU版本。
    可執行文件 口譯員 m4 傳統Unix宏處理器的GNU實現
    cpio.exe 實用程序 cpio 一個管理文件存檔的程序
    gawk.exe 實用程序 awk 模式導向的掃描和處理語言
    文件 實用程序 文件 使用“魔術”數字確定文件類型
    壓縮文件 封存 壓縮 打包和壓縮(存檔)文件
    解壓縮文件 封存 解壓縮 提取ZIP檔案中的壓縮文件
    免費版 系統 ps 顯示系統中的可用和已用內存量

    不要忘記將cygwin的'bin'文件夾添加到PATH中。

  2. 從此處安裝Mercurial并將“ hg”添加到PATH。
  3. 安裝用于Windows 7和.NET Framework 4的Microsoft Windows SDK 。
  4. 安裝DirectX SDK 。 JDK需要v9.0,但我很難找到它。 所以我決定不打擾并安裝最新的。 似乎工作正常。
  5. Bootstrap JDK是構建所必需的。 碰巧我使用了JDK6,但是假設任何> JDK6的版本都不會出現問題。
  6. 下載并安裝Ant 。 我使用的是1.8.2版本。 將Ant添加到PATH。
  7. 結帳來源。 由于多種原因,它是最復雜的部分。 “ hg”不是特別穩定,因此某些應該由我的腳本完成的操作是手動完成的。

    因此,要在命令行中開始運行此命令:

    hg clone --verbose --pull http://hg.openjdk.java.net/jdk7u/jdk7u <some_folder>\openjdk7'

    這應該下載帶有一些幫助腳本的根文件夾。

    然后在cygwin中,轉到剛剛創建的“ openjdk7”文件夾并運行“ get_source.sh”。 “ get_source.sh”可能會失敗或只是掛起(這正是我所發生的事情)。 如果是這樣,則您可以嘗試使用“ –pull”標志(元數據的拉協議)。 我不確定為什么,但這對我有所幫助。 不幸的是,腳本不是以非常友好的方式編寫的,并且無法將任何“ hg”參數傳遞給源檢索腳本。 因此,您需要轉到“ make \ scripts \ hgforest.sh”并將“ –pull”添加到“ hg clone”的每次調用中。

    而且即使添加“ -pull”后仍然失敗,嗯……只要放棄并手動運行以下命令:

    hg clone --verbose --pull http://hg.openjdk.java.net/jdk7u/jdk7u/corba corba
    hg clone --verbose --pull http://hg.openjdk.java.net/jdk7u/jdk7u/hotspot hotspot
    hg clone --verbose --pull http://hg.openjdk.java.net/jdk7u/jdk7u/jaxp jaxp
    hg clone --verbose --pull http://hg.openjdk.java.net/jdk7u/jdk7u/jaxws jaxws
    hg clone --verbose --pull http://hg.openjdk.java.net/jdk7u/jdk7u/jdk jdk
    hg clone --verbose --pull http://hg.openjdk.java.net/jdk7u/jdk7u/langtools langtools

    希望現在您有資源并且可以有所幫助:)

  8. Build需要一些外部二進制文件和一個可在Windows下運行的'make.exe'版本。 cygwin隨附的'make'并沒有真正起作用,因為路徑名中的驅動器字母存在一些問題。

    接下來是我們需要編譯幾個文件。 一種是“ make.exe”的固定版本。 另一個是FreeType庫,僅可作為源下載。

    如果您不希望編譯所有這些東西,而只想輕松編譯JDK,則建議從此處下載二進制文件(這是我的云端硬盤)。 將“ make.exe”解壓縮到“ openjdk7 / bin”中。 請注意,該軟件包中的“ make.exe”非常老,需要cygintl-3.dll,當前cygwin并未提供。 要修復此問題,只需復制cygintl-8.dll-> cygintl-3.dll。
    Freetype lib和dll必須放在ALT_FREETYPE_LIB_PATH conf變量引用的文件夾中(請參閱步驟13)。 另外,仍然需要一些Freetype標頭,并通過make通過ALT_FREETYPE_HEADERS_PATH變量找到它們(請參見步驟13)。 這意味著您還需要下載源代碼。

    如果您不是在尋找簡單的解決方案,而是想自己編譯這些二進制文件,請按照以下說明進行操作:

    1. 從這里下載make 3.82并解壓縮。 找到“ config.h.W32”并取消注釋行,定義為“ HAVE_CYGWIN_SHELL”。 在Visual Studio中打開make_msvc_net2003.sln解決方案,選擇“發布”配置并進行構建。 在“發布”文件夾中,您將獲得“ make_msvc.net2003.exe”,并將其重命名為“ make.exe”。
    2. 現在編譯FreeType:
      1. 從此處下載FreeType v.2.4.7的源。
      2. 將其解壓縮到某個位置,然后在Visual Studio中打開“ \ builds \ win32 \ vc2010 \ freetype.sln”。
      3. 轉到項目屬性(在項目樹中的項目上單擊鼠標右鍵),然后在“配置屬性/常規/配置類型”中選擇“動態庫(.ddl)”,然后將輸出重命名為“ freetype”。
      4. 更新ftoption.h,添加以下兩行:
        #定義FT_EXPORT(x)__declspec(dllexport)x
        #定義FT_BASE(x)__declspec(dllexport)x
      5. 進行構建,您將在objs \ win32 \ vc2010中獲得dll和lib。
      6. 不要忘記為“ ALT_FREETYPE_LIB_PATH”和“ ALT_FREETYPE_HEADERS_PATH”變量分配適當的值(請參閱步驟13)。
  9. 我在javadoc生成方面遇到了一些問題,但由于OutOfMemory失敗。 為了修復它,我不得不更改“ openjdk7 \ jdk \ make \ docs \ Makefile”。
    這段代碼:
    ifeq ($(ARCH_DATA_MODEL),64)MAX_VM_MEMORY = 1024
    else ifeq ($(ARCH),universal)MAX_VM_MEMORY = 1024
    elseMAX_VM_MEMORY = 512
    endif

    必須用以下內容替換:

    ifeq ($(ARCH_DATA_MODEL),64)MAX_VM_MEMORY = 1024
    else ifeq ($(ARCH),universal)MAX_VM_MEMORY = 1024
    elseMAX_VM_MEMORY = 1024
    endif
  10. 復制“ msvcr100.dll”到以下目錄:
    cp /cygdrive/c/Program\ Files\ \(x86\)/Microsoft\ Visual\ Studio\ 10.0/Common7/Packages/Debugger/X64/msvcr100.dll ./drops/
  11. 確保Windows之前的cygwin的“ find.exe”在PATH中。 最簡單的方法是將其復制到“ openjdk7 / bin”,然后在當前PATH的開頭進行設置。
  12. 創建一個類似于以下文件的批處理文件。 不要忘記適當地更新路徑:
    ALT_BOOTDIR=C:/Stuff/java_libs/jdk1.6.0_25
    ANT_HOME=C:/Stuff/java_libs/apache-ant-1.8.2
    JAVA_HOME=
    CLASSPATH=
    PATH=C:/Stuff/openjdk7/bin;%PATH%
    ALLOW_DOWNLOADS=true
    ALT_MSVCRNN_DLL_PATH=C:/Stuff/java_libs/openjdk7/dropsC:\WINDOWS\system32\cmd.exe /E:ON /V:ON /K 'C:\Program Files\Microsoft SDKs\Windows\v7.1\Bin\SetEnv.cmd' /Release /xp /x86
  13. 運行批處理文件。 現在,您已經完全配置了環境,可以開始構建了。 運行“ bash”,然后在shell中執行“ make”:
    make ARCH_DATA_MODEL=32 ALT_OUTPUTDIR=C:/Users/Stas/Stuff/java_libs/openjdk7/output_32 ALT_FREETYPE_LIB_PATH=C:/Users/Stas/Stuff/java_libs/openjdk7/freetype-2.4.7/objs/win32/vc2010 ALT_FREETYPE_HEADERS_PATH=C:/Users/Stas/Stuff/java_libs/openjdk7/freetype-2.4.7/include ALT_BOOTDIR=C:/Users/Stas/Stuff/java_libs/jdk1.6.0_25 ALT_DROPS_DIR=c:/OpenJDK/ALT_DROPS_DIR ALT_DROPS_DIR=C:/Users/Stas/Stuff/java_libs/openjdk7/drops HOTSPOT_BUILD_JOBS=4 PARALLEL_COMPILE_JOBS=4 2>&1 | tee C:/Stuff/java_libs/openjdk7/output_32.log

    這將開始構建32位JDK。

  14. 喝咖啡,茶或您想要的任何東西,然后大約一個小時后,您應該會看到類似以下的內容:
    #-- Build times ----------
    Target all_product_build
    Start 2012-09-01 23:08:55
    End   2012-09-01 23:55:48
    00:02:35 corba
    00:06:46 hotspot
    00:00:30 jaxp
    00:00:51 jaxws
    00:35:30 jdk
    00:00:37 langtools
    00:46:53 TOTAL
    -------------------------

參考:來自Stas博客博客的JCG合作伙伴 Stanislav Kobylansky在Windows上構建OpenJDK 。


翻譯自: https://www.javacodegeeks.com/2012/09/stass-blog-building-openjdk-on-windows.html

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/371571.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/371571.shtml
英文地址,請注明出處:http://en.pswp.cn/news/371571.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

unity中怎么在InspectorI面板加LOGO

轉載于:https://www.cnblogs.com/unitySPK/p/7278925.html

oracle stream 主鍵,oracle stream配置向導

1. Stream 的工作原理Stream 是Oracle Advanced Queue技術的一種擴展應用&#xff0c;這種技術最基本的原理就是收集事件&#xff0c;把時間保存在隊列中&#xff0c;然后把這些事件發布給不同的訂閱者。從DBA的角度來說&#xff0c;就是把捕獲Oracle數據庫產生的Redo日志&…

JavaScriptDOM 十四. Event DOM的屬性

1 <!DOCTYPE html>2 <html>3 <head>4 <title></title>5 <script type"text/javascript">6 7 /*8 1. --------------- Event DOM 事件DOM 用戶交互 ------------------9 當事件發生時, 執行JS功能代碼10 11 常用…

五、創建Bean的三種方式

五、創建Bean的三種方式轉載于:https://www.cnblogs.com/ljiwej/p/7280614.html

重寫到邊緣–充分利用它! 在GlassFish上!

現代應用程序開發的一個重要主題是重寫。 自從Java Server Faces引入和Java EE 6中新的輕量級編程模型以來&#xff0c;您一直在努力使用漂亮&#xff0c;簡單&#xff0c;可添加書簽的URL。 PrettyFaces很久以來就一直存在&#xff0c;即使它在3.3.3版本中可以說是成熟的&…

php yii框架路由,yii框架路由配置

首先要在服務器配置(httpd.conf)中開啟重寫模塊#開啟重寫模塊&#xff0c;將其前面的#去掉LoadModule rewrite_module modules/mod_rewrite.so#Directory中允許覆蓋開啟## Possible values for the Options directive are "None", "All",# or any combinat…

前端面試總結二

一、響應式和自適應的區別&#xff1a; 聯系(相同點)&#xff1a; 響應式設計(responsive design)和自適應設計(adaptive design)都是用來解決網頁在不同分辨率的屏幕和設備上展示的一項技術(或者說一種方法)。 區別&#xff1a; 響應式設計&#xff1a;通過CSS Media Queries(…

“Spring入門”教程系列

大家好&#xff0c; 我很高興向您介紹“Spring入門”教程系列&#xff01; 這是一系列文章&#xff0c;最初由我們的JCG合作伙伴 Michal Vrtiak在vrtoonjava博客上撰寫 。 本系列中將逐步創建一個時間表管理應用程序&#xff0c;并且每個教程都在前一個教程的基礎上構建。 處…

【看番雜感】Clannad系列觀后感(劇透慎入)

前言 之前看第一季時&#xff0c;彈幕里總有人在刷“寫作cl&#xff0c;讀作人生”。當時我想&#xff0c;盲目把一部催淚番上升到人生的高度&#xff0c;這未免有些武斷&#xff0c;也是對作品本身的不尊重。當看完第二季的我驀然回首&#xff0c;發現這才是最最貼切的評價&am…

oracle+tns+01106,TNS-01106:Listener using listener name already been started

最近在做HACMP雙機互備切換測試的時候&#xff0c;發現一個問題&#xff1a;A節點的listener端口為1521 &#xff0c;B節點的listener端口為1522&#xff0c;為什么兩個節點的監聽要用不同的端口號&#xff1f;當時AB機使用不同端口是基于如下考慮&#xff1a;HACMP的切換數據庫…

Centos7 開機顯示 ERST: Failed to get Error Log Address Range” 導致無法開機解決方法

開機顯示 ERST: Failed to get Error Log Address Range” 導致無法開機&#xff0c;也無法重新安裝系統&#xff0c;解決方法&#xff1a;開機進入BIOS &#xff0c; 關閉ACPI選項即可正常開機 轉載于:https://www.cnblogs.com/zhangjianghua/p/6376811.html

Spring MVC 3模板和Apache Tiles

對于任何Web應用程序而言&#xff0c;有效的設計考慮因素是使用模板引擎&#xff08;或工具&#xff09;&#xff0c;并且由于具有Spring的“可插拔”特性&#xff0c;因此集成模板機制&#xff08;例如Apache Tiles&#xff09;的確要容易得多。 在這篇簡單的文章中&#xff0…

hihocoder1543 SCI表示法

題意&#xff1a;任何一個數可以表示為連續整數相加&#xff0c;問這些連續整數的最大長度 題解&#xff1a;假設左右是l,r,那么(lr)*(l-r1)/2就是這段序列的和&#xff0c;枚舉2n的所有因子&#xff0c;找到最大的就可以了 我的做法是預處理前綴和&#xff0c;二分找到答案位置…

linux自動安裝Java環境腳本,Linux 自動添加JAVA環境腳本

Linux 自動添加JAVA環境腳本1. 刪除原有的JAVA環境變量配置### --------------delete old config -------------------- ###sed -i -e /JAVA_HOME/d -e /JRE/d /etc/profile刪除包含JAVA_HME 、JRE的行2. 加入現有的JAVA環境變量配置### -------------- add new config ----…

輾轉相除法的證明

輾轉相除法的證明設兩數為a、b(b&#xff1c;a)&#xff0c;求它們最大公約數的步驟如下&#xff1a;用b除a&#xff0c;得a&#xff1d;bq&#xff0b;r&#xff08;0≤r&#xff1c;b&#xff09;&#xff08;q是這個除法的商&#xff09;。若r0,則b是a和b的最大公約數。若r≠…

linux查看有幾個終端命令,如何知道你在 Linux 里最常使用的幾個命令?

不知道大家自接觸 Linux 以來&#xff0c;都使用過哪些命令&#xff0c;其中最常用的命令是什么&#xff1f;我最常用的命令之一是 sudo &#xff0c;因為我每天都在使用它在 Linux 上安裝、更新、刪除軟件包以及其它各種需要超級用戶權限的操作。那么你知道你自己最經常使用的…

使用JUnit的ExpectedException和@Rule測試自定義異常

異常測試 為什么要測試異常流&#xff1f; 就像所有代碼一樣&#xff0c;測試覆蓋率會在代碼和應該生成的業務功能之間寫一個合同&#xff0c;從而為您提供代碼的有效文檔 &#xff0c;以及增加的盡早且經常強調功能的功能。 我不會介紹測試的許多好處&#xff0c;而是只關注異…

線程的工具類(Exchange)

public class Exchanger<V>extends Object 可以在對中對元素進行配對和交換的線程的同步點。每個線程將條目上的某個方法呈現給 exchange 方法&#xff0c;與伙伴線程進行匹配&#xff0c;并且在返回時接收其伙伴的對象。Exchanger 可能被視為 SynchronousQueue 的雙向形…

js 判斷瀏覽器是否64位

js判斷是否64位 瀏覽器 navigator.userAgent.match(/x64/i); 轉載于:https://www.cnblogs.com/fanlinglong/p/7298733.html

linux ss 軟件,linux ss 網絡狀態工具

ss是Socket Statistics的縮寫查看網絡狀態&#xff0c;經常用的命令&#xff1a; watch ss -lntss命令用于顯示socket狀態. 他可以顯示PACKET sockets, TCP sockets, UDP sockets, DCCP sockets, RAW sockets, Unix domain sockets等等統計. 它比其他工具展示等多tcp和state信…