无法链接 linker.ld

Posted

技术标签:

【中文标题】无法链接 linker.ld【英文标题】:Cannot link linker.ld 【发布时间】:2017-02-16 04:44:04 【问题描述】:

我目前正在关注 OSDev 的 Bare Bones 教程,我已经设置了所有内容并将内核和引导加载程序编译到目标文件中,并且我有 .ld 文件。但是,当我尝试使用 i686-elf-gcc -T linker.ld -o myos.bin -ffreestanding -O2 -nostdlib boot.o kernel.o -lgcc 链接文件并将其生成到 bin 中时,我收到此错误:

.../i686/bin/../lib/gcc/i686-elf/4.8.2/../../../../i686-elf/bin/ld.exe: cannot open linker script file linker.ld

collect2.exe: error: ld returned 1 exit status

我正在使用 GCC 并使用 i686-elf-gcc 的编译版本,其中包括更多编译器,并且我添加了 4 个缺少的 dll(也与链接器无关),但我安装了 MinGW 并添加了它们。我在 Windows 10 x64 上。我发现的许多解决方案或解决方法只是带来了更多错误或对错误完全没有任何作用(-T 没有任何作用,-noixemul 不是参数。)。我删除了多重引导内容,因为我将使用一个扇区长的引导加载程序来加载目标文件。

【问题讨论】:

你确定这是 gcc 的完整输出吗? 查看文件是否存在...尝试使用 versbose 选项-Wl,--verbose 以获取更多信息,例如链接器在哪里搜索链接器脚本...如果有文件,请查看@987654324 的权限@ 可能有帮助 【参考方案1】:

如果我没记错的话,你的问题真的,真的真的很简单:

您无权访问linker.ld。尝试以超级用户身份运行或更改权限。

如果这不能解决问题,则说明您遇到了实际问题。尽量不要使用-T 标志。

编辑: 亲爱的上帝,我没想到这是正确的。谢谢!

【讨论】:

这是一个糟糕且可能很危险的解决方案。更好的建议是简单地使用chmodchown linker.ld,以便当前用户确实 有权读取该文件。 除了这些文件权限之外,没有理由以 root 身份运行链接器! 啊,很确定 OP 说他在 Windows 10 上。最后我检查了一下,那里没有 root。

以上是关于无法链接 linker.ld的主要内容,如果未能解决你的问题,请参考以下文章

无法从 Firebase 缩短的动态链接网址检索动态链接

电脑老是出现“无法定位序数4445于动态链接库”,是怎么回事儿?

为啥链接器无法识别我的链接器脚本中定义的入口点

无法定位序数4444于动态链接库libcurl.dll应当如何解决?

VC中使用openGL链接显示 无法解析的外部符号

VC中使用openGL链接显示 无法解析的外部符号