compilation - 在Cygwin上编译GRUB(64位)

标签 compilation compiler-errors cygwin posix grub

我在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。不幸的是,这可能意味着要重新构建所有工具。

无论哪种方式,我都会查看是否可以解决此新问题,如果可以,我会告诉您。

关于compilation - 在Cygwin上编译GRUB(64位),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30886717/

相关文章:

c++ - 从 Windows 命令行运行 C++ 应用程序

c - 可以强制可执行文件使用用户定义的 'malloc' 吗?

c++ - 在Ubuntu 16.04上编译Armadillo C++库时出错

iPhone 编译拇指

java - 为什么下面的java语句可以编译成功?

amazon-web-services - 在cygwin上配置aws时没有这样的文件或目录错误

windows - 一起使用cygwin和mingw

对具有无界通配符类型的方法参数使用泛型 lambda 的 Java 编译错误

c++ - 从类型 ‘foo*&’ 的右值初始化类型 ‘foo*’ 的非常量引用无效?

python - 我们可以欺骗 Cygwin 的 Python 在 win32 平台上吗? (安装 PyBluez)