【发布时间】:2017-10-14 17:20:01
【问题描述】:
我在链接文件以使我的操作系统 (Thunder) 工作时遇到问题。我编译start.o :
nasm -f aout start.o start.asm
当我将引导加载程序和内核链接在一起时,它给了我这个错误:
start.o: 无法识别文件:无法识别文件格式。
关于我为什么会收到此错误以及如何解决它的任何建议?
【问题讨论】:
-
您需要向我们展示代码,以及如何链接文件。你在哪个平台?如果
file命令可用,很想知道file start.o返回什么。 -
@CoryKramer。这被标记为另一个问题的重复,但这两件事不相关。这可能是一个糟糕的问题,但它不是 What is an undefined reference/unresolved external symbol error and how to fix it? 的重复。这个问题实际上是关于为什么链接器不喜欢目标文件格式。这不是关于找不到的符号,而是关于由于文件格式无法识别而无法处理的目标文件。
-
Michael,它输出它是一个Linux i686文件。
-
您能否复制并粘贴
file start.o的确切输出(我假设您的系统有程序file)。同样,您是在 Windows 上吗? (如果在 Windows 上,您使用的是 Cygwin 还是 MinGW?)或者您使用的是 Linux 或 OS/X 还是其他? -
您最初将此问题标记为 c++。鉴于错误似乎来自 GNU C/C++ 工具链 (LD),我想知道。你编译
start.o是否使用与此类似的命令(可能有其他选项和不同的文件名):g++ -c start.cpp somefile.h -o start.o。如果您使用 G++ 编译(使用-c)并在命令行上指定头文件并指定输出文件(-o选项),那么 G++ 将创建一个预编译的头文件并将其放在start.o中。这些不能联系起来。如果你有头文件作为 G++ 编译行的一部分 - 删除它们。
标签: windows x86 cygwin nasm ld