Wie man ext4magic src/recover.c:478:(.text+0x847): undefined reference to 'makedev' behebt

Problem

Beim Versuch, ext4magic auf modernen Linux-Versionen zu kompilieren, sehen Sie einen Fehler wie diesen:

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

Lösung

Die makedev-Funktion ist Teil der sys/sysmacros.h-Header-Datei, die nicht im ext4magic-Quellcode enthalten ist.

Um dies zu beheben, müssen Sie die folgende Zeile zur src/recover.c-Datei hinzufügen:

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

Oder, um es sich einfacher zu machen, ersetzen Sie einfach eine einzelne Zeile in der recover.c-Datei mit dem folgenden Shell-Skript

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

Versuchen Sie nun erneut, mit make zu kompilieren, und der Fehler sollte verschwunden sein.


Check out similar posts by category: Linux