如何解决这个问题[警告:忽略文件,文件是为不支持的文件格式构建的]

时间:2013-12-30 11:54:43

标签: c

我得到了一些示例代码,用于对我讲师的FAT12磁盘映像文件中的所有文件和目录进行递归列表。

我仔细按照说明操作,但得到一些奇怪的错误消息:

ld: warning: ignoring file floppy.img, file was built for unsupported file format
(0xEB 0x3C 0x90 0x42 0x53 0x44 0x20 0x20 0x34 0x2E 0x34 0x00 0x02 0x01 0x01 0x00 ) 
which is not the architecture being linked (x86_64): floppy.img
Undefined symbols for architecture x86_64:
  "_check_bootsector", referenced from:
       _main in dos_ls-LKA1e2.o
  "_cluster_to_addr", referenced from:
       _follow_dir in dos_ls-LKA1e2.o
  "_get_fat_entry", referenced from:
  _     follow_dir in dos_ls-LKA1e2.o
  "_mmap_file", referenced from:
        _main in dos_ls-LKA1e2.o
ld: symbol(s) not found for architecture x86_64
clang: error: linker command failed with exit code 1 (use -v to see invocation)

gcc ./dos_ls.c floppy.img 是我在终端中使用的命令。 dos_ls.c是c文件,floppy.img是他给我们的样本img。

我认为这个img的格式有问题吗? 任何人都可以解释这个错误并告诉我如何解决它吗?

更新:例如“./dos_ls floppy.img”将列出名为floppy.img的磁盘映像文件中的所有文件和目录。这是我给出的指令。我正在做什么有什么问题?

gcc ./dos_ls.c 会出现此错误消息:

 Undefined symbols for architecture x86_64:
  "_check_bootsector", referenced from:
      _main in dos_ls-xHY6F1.o
  "_cluster_to_addr", referenced from:
      _follow_dir in dos_ls-xHY6F1.o
  "_get_fat_entry", referenced from:
      _follow_dir in dos_ls-xHY6F1.o
  "_mmap_file", referenced from:
      _main in dos_ls-xHY6F1.o
ld: symbol(s) not found for architecture x86_64
clang: error: linker command failed with exit code 1 (use -v to see invocation)

gcc --version

Configured with: --prefix=/Applications/Xcode.app/Contents/Developer/usr --with-gxx-
include-dir=/usr/include/c++/4.2.1
Apple LLVM version 5.0 (clang-500.2.79) (based on LLVM 3.3svn)
Target: x86_64-apple-darwin13.0.0
Thread model: posix

更新: gcc -o hello dos_ls.c dos.c 在当前目录中创建一个新文件:

Usage: dos_ls <imagename>
logout

[Process completed]

执行此操作的正确方法是什么???

2 个答案:

答案 0 :(得分:0)

您要编译此代码然后执行吗? 猜测一下,也许你应该先编译

  

gcc ./dos_ls.c

生成可以运行的可执行代码。

例如,如果gcc创建一个名为a.out的可执行文件,它运行以图像文件作为参数的代码:

  

./ a.out floppy.img

答案 1 :(得分:0)

根据您添加到问题中的信息,您的问题是dos_ls.c文件调用了一些未在那里定义的函数。
因此,链接器抱怨没有找到这些函数的实现,因此符号是未定义的。

如果您的讲师为您提供了更多.c源文件,其中包含这些函数的定义(以及提供函数声明的相关头文件),您必须将它们与主源文件一起编译。

我假设胖12相关功能,所以我想你有以下文件:

dos_ls.c
fat12.h
fat12.c

通常,dos_ls.c将#include "fat12.h",您需要使用如下命令行编译.c文件:

gcc -o dos_ls dos_ls.c fat12.c

这应该有用。

现在,要使用提供的图像文件作为参数执行二进制文件,只需键入:

./dos_ls floppy.img

这正是您在问题中引用的说明。