ARM Linux 上的我的世界?(三星 Chromebook)
因此,我已經嘗試了一個多星期來讓 Minecraft 在具有 ARM 架構的三星 Chromebook 上安裝 Ubuntu 上執行。我一直在遵循我在lwjgl 論壇上找到的這些說明:
- 安裝 Oracle JVM。此處的說明:http ://www.webupd8.org/2012/01/install-oracle-java-jdk-7-in-ubuntu-via.html
- 下載 minecraft 啟動器並執行一次,讓它更新然後崩潰。
- 安裝 libegl1-mesa。在終端中執行命令“sudo apt-get install libegl1-mesa”。
- 為 ARM 平台下載並編譯 LWJGL。在這裡可以找到說明:http ://rogerallen.github.io/jetson/2014/07/31/minecraft-on-jetson-tk1/
- 用編譯產生的庫給 Minecraft 打更新檔。你需要做的是:
* 找到 Minecraft 的工作目錄。這通常是 ~/.minecraft * 導航到“版本”文件夾。複製您要修補的版本文件夾並將其重命名為“xxxarm”(xxx 是版本號) * 打開複製的文件夾並將裡面的jar和json文件更改為相同的名稱。 * 打開 json 文件並在您在其中找到的每個 LWJGL 庫實例的版本號後附加“arm”(忽略夜間建構) * 導航到 ~/.minecraft/libraries/org/lwjgl/lwjgl,裡面的每個庫都會有一個文件夾。在每個文件夾中,您都會找到一個標有版本號的文件夾。將“arm”附加到每個末尾。 * 用您的新庫替換這些文件夾中的庫。當您到達“lwjgl_platform”時,您需要打開 .jar 文件並刪除除“liblwjgl.so”之外的所有庫。將其替換為新的 ARM 編譯版本。 * 確保在您看到版本號(通常為 2.9.1)的任何地方都將“arm”附加到末尾。這主要是為了讓我的世界啟動器不知道文件是什麼並且不會嘗試更新它們。如果您正確修補了 json 文件,它仍然會執行。 * 開始遊戲!如果說明太複雜,我可能會很快製作一個 shell 腳本來為您完成所有這些工作。
但它不起作用,我不確定出了什麼問題。我已經下載了所有的軟體包,並按照所有步驟操作,但我不確定出了什麼問題。
我很確定我已經正確編譯了 LWJGL。我已經完成了文章解釋的所有事情。
這是我嘗試執行 Minecraft 時遇到的錯誤:
Java HotSpot(TM) Client VM warning: You have loaded library /home/cody-pc2/.minecraft/versions/1.8.5/1.8.5-natives-2398282912182/liblwjgl64.so which might have disabled stack guard. The VM will try to fix the stack guard now. It's highly recommended that you fix the library with 'execstack -c <libfile>', or link it with '-z noexecstack'. Exception in thread "main" java.lang.UnsatisfiedLinkError: /home/cody-pc2/.minecraft/versions/1.8.5/1.8.5-natives-2398282912182/liblwjgl.so: /home/cody-pc2/.minecraft/versions/1.8.5/1.8.5-natives-2398282912182/liblwjgl.so: cannot open shared object file: No such file or directory (Possible cause: can't load IA 32-bit .so on a ARM-bit platform) at java.lang.ClassLoader$NativeLibrary.load(Native Method) at java.lang.ClassLoader.loadLibrary1(ClassLoader.java:1965) at java.lang.ClassLoader.loadLibrary0(ClassLoader.java:1890) at java.lang.ClassLoader.loadLibrary(ClassLoader.java:1880) at java.lang.Runtime.loadLibrary0(Runtime.java:849) at java.lang.System.loadLibrary(System.java:1088) at org.lwjgl.Sys$1.run(Sys.java:72) at java.security.AccessController.doPrivileged(Native Method) at org.lwjgl.Sys.doLoadLibrary(Sys.java:66) at org.lwjgl.Sys.loadLibrary(Sys.java:96) at org.lwjgl.Sys.<clinit>(Sys.java:117) at ave.J(SourceFile:2524) at net.minecraft.client.main.Main.main(SourceFile:41)
一般注意事項
(對於任何拼寫、語法和措辭錯誤以及過於復雜的表達和解釋,我深表歉意,英語不是我的母語……)
我設法讓 Minecraft 在我的 ARM-Chromebook 上執行;但是,它可能不適用於未來的版本(也許您必須修改腳本,也許它根本不起作用)。
我上次嘗試使用此方法的 Launcher 是
1.6.61
Minecraft 版本是1.9.2
.建議了解一些如何編寫 bash 腳本;不要使用我的腳本來學習 bash,我不擅長它,你不應該學習糟糕的編碼實踐。(此程式碼可能是可以接受的,但不要將其用於學習。)
這樣做需要您自擔風險。(我認為任何事情都不會出錯;無論如何,備份總是一個好主意。)
我的實際答案
工作原則
MC-Launcher 使用 Mojang-Server 進行身份驗證、更新(包括庫更新)、配置文件管理,然後將所需的參數傳遞給 MC-Client。MC-Launcher 還將庫路徑傳遞給客戶端。通過編寫 java-wrapper-script 我們可以修改傳遞給客戶端的庫路徑。
選擇更新的 Java 專有版本(可選)
據我所知, Java 8 為 ARM 平台帶來了一些顯著的性能改進。通過直接使用 Oracle 的版本,您不會獲得自動更新。
您可以在此處下載專有的 Java 8 。轉到下載頁面(連結可能會不時更改,這就是我沒有直接連結的原因),選擇接受許可證並下載您需要的版本(在我的例子中是“Linux ARM 32 Soft Float ABI”) . 解壓 tar 文件,將其儲存在電腦上的任何位置(例如,在 ~/proprietary_java/ 中)。
啟動啟動器
如果您下載了 Java 8 並且沒有以任何方式安裝它(僅在某處解壓縮存檔),您可以通過執行啟動啟動器,例如
~/proprietary_java/jdk1.8.0_77/bin/java -jar ~/<path-to-the-minecraft-launcher>
. (在某個時候發布較新版本的 Java 時,您可能需要相應地更改路徑。您可能還需要為此編寫自定義 .desktop 文件或啟動腳本。)Java 包裝器
這就是我的解決方案有點老套的地方(不是很好)。您可以使用此腳本,但可能需要修改路徑:
#!/bin/bash ARGS=$@ #echo $ARGS > /tmp/args_original #uncomment for debugging JAVA=$HOME/proprietary_java/jdk1.8.0_77/bin/java JAVA_LIB_SETTING="-Djava.library.path=" JAVA_LIB_PATH="$HOME/MC_libs" MC_ORIG_LWJGL="$HOME/.minecraft/libraries/org/lwjgl/lwjgl/lwjgl/2.9.4-nightly-20150209/lwjgl-2.9.4-nightly-20150209.jar" MC_ORIG_LWJGL_UTIL="$HOME/.minecraft/libraries/org/lwjgl/lwjgl/lwjgl_util/2.9.4-nightly-20150209/lwjgl_util-2.9.4-nightly-20150209.jar" MC_ARM_LWJGL="$HOME/proprietary_java/MC_libs/lwjgl.jar" MC_ARM_LWJGL_UTIL="$HOME/proprietary_java/MC_libs/lwjgl_util.jar" ARGS=$(echo $ARGS | sed "s|$MC_ORIG_LWJGL|$MC_ARM_LWJGL|g" | sed "s|$MC_ORIG_LWJGL_UTIL|$MC_ARM_LWJGL_UTIL|g" ) ARGS=$(echo $ARGS | sed "s|-Djava.library.path=[a-zA-Z0-9_\/\\\.-]\+|$JAVA_LIB_SETTING$JAVA_LIB_PATH |g") #magic ;-) # the magic seems to eat the space-character though; this is why it's added after JAVA_LIB_PATH (I'm not good at regex) #"[a-zA-Z0-9_\/\\\.-]\+" explained: # match a-z and A-Z and 0-9 and '_' and '/' and '\' and '.' and '-' (this must be at the end it seems). # "\+": escape the '+'; match this pattern multiple times. # (this means: start at "-Djava.library.path=" and stop replacing at the first space that occurs) #echo $ARGS > /tmp/args_modified #uncomment for debugging $JAVA $ARGS
將此腳本保存為 java_wrapper 並使文件可執行(例如
chmod +x java_wrapper
)解釋:
ARGS=$@
:獲取傳遞給包裝器的參數(或多或少是傳遞給 MC-Client 的參數)。我們這樣做是因為我們想要修改這些,並且“ARGS”比“$@”更容易解釋
echo $ARGS > /tmp/args_original
:這會將所有參數放入文件 /tmp/args_original。當遊戲不再啟動時,這很有用 - 某些路徑可能已更改,您可能需要替換一些路徑。使用它,您可以查看需要替換哪些路徑 - 很快就會有更多資訊。
JAVA=$HOME/proprietary_java/jdk1.8.0_77/bin/java
:Java 執行檔的路徑。
JAVA_LIB_SETTING="-Djava.library.path="
:這就是java想要獲取庫路徑的方式。MC-Launcher 像這樣通過它們。也許這會在某個時候改變(可能不會),然後您需要了解 Minecraft 如何告訴 Java 在哪裡尋找這些庫。(取消註釋echo $ARGS > /tmp/args_original
並查看 /tmp/args_original 並蒐索看起來像傳遞庫的東西;對不起,我無法提供更清楚的資訊(我這樣做了)但也許有人可以提供正確的方法-在評論中?)
JAVA_LIB_PATH="$HOME/MC_libs"
: 按照此處所述編譯 libopenal 和 liblwjgl並將文件lwjgl/libs/linux/liblwjgl.so
,lwjgl/libs/lwjgl.jar
和(從 libopenal.so 中刪除 “.1.15.1”) 放在您要使用的目錄中 (例如在我的範例中為 ~/MC_libs)lwjgl/libs/lwjgl_util.jar``openal-soft-1.15.1/build/libopenal.so.1.15.1
MC_ORIG_LWJGL=
:這是lwjgl.jar 的原始路徑,因為它由啟動器傳遞。這可能會在某個時候發生變化(然後取消註釋用於調試的行並在 /tmp/args_original 中搜尋類似“lwjgl.jar”的內容)
MC_ORIG_LWJGL_UTIL
:這是 lwjgl_util.jar 的原始路徑,因為它由啟動器傳遞。這可能會在某個時候發生變化(然後取消註釋用於調試的行並在 /tmp/args_original 中搜尋類似“lwjgl_util.jar”的內容)
MC_ARM_LWJGL
:這是您編譯的 lwjgl.jar 的路徑(如我的“JAVA_LIB_PATH =”描述中所述)
MC_ARM_LWJGL_UTIL
:這是您編譯的 lwjgl_util.jar 的路徑(如我的“JAVA_LIB_PATH =”描述中所述)
ARGS=$(echo $ARGS | sed "s|$MC_ORIG_LWJGL|$MC_ARM_LWJGL|g" | sed "s|$MC_ORIG_LWJGL_UTIL|$MC_ARM_LWJGL_UTIL|g" )
:這裡我們更改參數中的前幾件事:我們替換路徑 $ MC_ORIG_LWJGL with $ MC_ARM_LWJGL 和 $ MC_ORIG_LWJGL_UTIL with $ MC_ARM_LWJGL_UTIL。
ARGS=$(echo $ARGS | sed "s|-Djava.library.path=[a-zA-Z0-9_\/\\\.-]\+|$JAVA_LIB_SETTING$JAVA_LIB_PATH |g") #magic ;-)
:這裡我們用我們的庫路徑替換庫路徑(實際上可能會在某些時候改變);我們替換“-Djava.library.path=”後的指定路徑。我希望你那裡沒有任何空格,我不擅長正則表達式(這就是“$$ a-zA-Z0-9_/.- $$+"-thingy 被稱為)。
echo $ARGS > /tmp/args_modified
: 如果您想查看我們對 ARGS 進行修改後得到的結果,請取消註釋此行。這對於找出路徑中的錯誤很有用。(我經常需要這個正則表達式^^)
$JAVA $ARGS
:呼叫我們在頂部指定的 Java 版本,並將修改後的 MC-Launcher 參數傳遞給它。讓 Launcher 執行我們的包裝器
啟動 MC-Launcher,登錄(如果需要)並編輯目前配置文件:在“Java 設置(高級)”部分中,選中“執行檔”選項並將路徑更改為我們的 Java-wrapper-script。
現在終於到了測試我們的包裝器的時候了!啟動 MC-Launcher 並像往常一樣啟動我的世界。而已!如果它不起作用,您將收到一些錯誤消息,這些消息有望解釋問題所在……然後您可能需要更改一些路徑。(讓我們希望它不止於此。)如果它有效:玩得開心!
隨意提出任何問題,在某些情況下,我可能能夠提供答案——如果不是,我希望其他人也能。
您可以嘗試從 Windows 複製一個 minecraft 文件夾。將其粘貼到 PC 上的某個位置,然後從命令行執行 minecraft JAR,https://stackoverflow.com/questions/14531917/launch-minecraft-from-command-line-usename-and-password-as-prefix