簡體   English   中英

在Cygwin上編譯GRUB(64位)

[英]Compiling GRUB on Cygwin (64 bit)

我在Windows 8.1上使用64位Cygwin進行一些基本的操作系統開發。 我想使用GRUB 2.00附帶的實用程序(例如mkrescue和mkimage),因為我的內核兼容Multiboot 2,並且我要從CD引導。

GRUB 之外 ,我在Cygwin中編譯所需的所有工具都沒有問題,它會吐出以下錯誤:

libgrubkern.a(libgrubkern_a-getroot.o):getroot.c:(.text+0x215): undefined reference to `cygwin_conv_to_full_posix_path'
libgrubkern.a(libgrubkern_a-getroot.o):getroot.c:(.text+0x215): relocation truncated to fit: R_X86_64_PC32 against undefined symbol `cygwin_conv_to_full_posix_path'
libgrubkern.a(libgrubkern_a-getroot.o):getroot.c:(.text+0x228): undefined reference to `cygwin_conv_to_full_win32_path'
libgrubkern.a(libgrubkern_a-getroot.o):getroot.c:(.text+0x228): relocation truncated to fit: R_X86_64_PC32 against undefined symbol `cygwin_conv_to_full_win32_path'
collect2: error: ld returned 1 exit status
Makefile:16816: recipe for target 'grub-mkrelpath.exe' failed

顯然,這與Cygwin在Windows和Posix樣式路徑之間的轉換有關。 有點令人沮喪,因為即使是與GCC交叉編譯器一樣大的東西都可以編譯而沒有這樣的問題。

我已經在Google上搜索了確切的錯誤,但是沒有找到與GRUB相關的點擊。 有人對此有解決方案嗎?

亞當

看來我走的路與您所走的路相似。 從我所看到的,那行路徑功能已被棄用和刪除,被一種新的方法所取代。 我能夠繼續進行編譯,但是遇到了一個不同但可能不相關的錯誤。

在函數grub_find_device()中的文件util / getroot.c中,我替換了:

cygwin_conv_to_full_posix_path (path, fullpath);
cygwin_conv_to_full_win32_path (fullpath, winpath);

具有以下內容:

cygwin_conv_path(CCP_WIN_A_TO_POSIX, path, fullpath, PATH_MAX);
cygwin_conv_path(CCP_POSIX_TO_WIN_A, fullpath, winpath, PATH_MAX);

不幸的是,我遇到了下一個:

TARGET_OBJ2ELF=../grub-pe2elf sh genmod.sh moddep.lst regexp.module.exe regexp.mod
./../grub-pe2elf: error: invalid symbol.

我發現針對此問題提到的另一個(不太理想,但可能不太煩人)的解決方案是嘗試找到較舊版本的Cygwin,或與您想要的GRUB版本一起使用的32位版本的Cygwin。 不幸的是,這可能意味着要重新構建所有工具。

無論哪種方式,我都會查看是否可以解決此新問題,如果可以,我會告訴您。

自我發布原始問題以來已經有很長時間了,但是我又找到了它。 只是說,對我來說,長遠的答案是從Cygwin轉向,而我現在在Windows的Ubuntu上使用Bash,這對於我使用的所有實用程序都更加成功。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM