繁体   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