我得到了一些示例代码,用于对我讲师的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]
执行此操作的正确方法是什么???
答案 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
这正是您在问题中引用的说明。