如何修复 ext4magic src/recover.c:478:(.text+0x847): undefined reference to 'makedev'

问题

尝试在现代 Linux 版本上编译 ext4magic 时,你会看到如下错误:

ext4magic_recover_makedev_fix.patch
gcc -O2 -g -D_FILE_OFFSET_BITS=64 -g -O2 -o ext4magic ext4magic-block.o ext4magic-dir_list.o ext4magic-ext4magic.o ext4magic-extent_db.o ext4magic-file_type.o ext4magic-hard_link_stack.o ext4magic-imap_search.o ext4magic-inode.o ext4magic-journal.o ext4magic-lookup_local.o ext4magic-magic_block_scan.o ext4magic-recover.o ext4magic-ring_buf.o ext4magic-util.o  -le2p -luuid -lblkid -lz -lbz2 -lmagic -lext2fs
/usr/bin/ld: ext4magic-recover.o: in function `recover_file':
/mnt/nas/ext4magic-0.3.2/src/recover.c:478:(.text+0x847): undefined reference to `makedev'
collect2: error: ld returned 1 exit status

解决方案

makedev 函数是 sys/sysmacros.h 头文件的一部分,该头文件未包含在 ext4magic 源代码中。

要修复此问题,你需要在 src/recover.c 文件中添加以下行:

recover.c
#include <sys/sysmacros.h>

或者,为了更方便,只需使用以下 shell 脚本替换 recover.c 文件中的一行

fix_recover_c.sh
sed -i -e 's^//header  util.h^#include <sys/sysmacros.h>^' src/recover.c

现在,使用 make 重试编译,错误应该消失了。


Check out similar posts by category: Linux