더 많은 종속성이 있는 패키지에 대해 32비트 헤더를 설치하려고 했습니다.64비트오늘 밤에는 Kali Linux를 사용하지만 이 문제를 디버깅할 만큼 Linux C 빌드 시스템을 잘 모릅니다. 파일은 cdefs.h입니다. 내가 아는 한, cdefs.h는 32비트 Linux에서만 나타납니다.
cdefs.h를 찾을 수 없어 빌드 프로세스가 중단되었으므로 계속해서 찾으려고 했습니다.
root@kali:~# dpkg -S /usr/include/sys/cdefs.h
libc6-dev-i386: /usr/include/sys/cdefs.h
따라서 dpkg는 cdefs.h가 libc6-dev-i836에 존재한다고 생각합니다.
root@kali:~# apt-get install libc6-dev-i386
Reading package lists... Done
Building dependency tree
Reading state information... Done
libc6-dev-i386 is already the newest version.
The following packages were automatically installed and are no longer required:
lib32asan1 lib32atomic1 lib32cilkrts5 lib32gcc1 lib32gomp1 lib32itm1 lib32quadmath0 lib32stdc++6
lib32ubsan0 libc6-amd64:i386 libltdl-dev xinit
Use 'apt-get autoremove' to remove them.
0 upgraded, 0 newly installed, 0 to remove and 12 not upgraded.
1 not fully installed or removed.
After this operation, 0 B of additional disk space will be used.
Do you want to continue? [Y/n] y
Setting up libc6-amd64 (2.19-18+deb8u3) ...
Processing triggers for libc-bin (2.19-18+deb8u3) ...
가는 게 좋지, 그렇지?
root@kali:~# locate cdefs.h
/usr/i686-w64-mingw32/include/sys/cdefs.h
/usr/include/bsd/sys/cdefs.h
/usr/share/mingw-w64/include/sys/cdefs.h
아뇨, 거기 없어요.
root@kali:~# ls /usr/include/sys/cdefs.h
/usr/include/sys/cdefs.h
이것은 심볼릭 링크입니다.
root@kali:~# cd /usr/include/sys/
root@kali:/usr/include/sys# ls
acct.h fcntl.h klog.h procfs.h sendfile.h swap.h timex.h utsname.h
auxv.h file.h mman.h profil.h shm.h syscall.h ttychars.h vfs.h
bitypes.h fsuid.h mount.h ptrace.h signalfd.h sysctl.h ttydefaults.h vlimit.h
cdefs.h gmon.h msg.h queue.h signal.h sysinfo.h types.h vm86.h
debugreg.h gmon_out.h mtio.h quota.h socket.h syslog.h ucontext.h vt.h
dir.h inotify.h param.h raw.h socketvar.h sysmacros.h uio.h vtimes.h
elf.h ioctl.h pci.h reboot.h soundcard.h termios.h ultrasound.h wait.h
epoll.h io.h perm.h reg.h statfs.h timeb.h un.h xattr.h
errno.h ipc.h personality.h resource.h stat.h time.h unistd.h
eventfd.h kdaemon.h poll.h select.h statvfs.h timerfd.h user.h
fanotify.h kd.h prctl.h sem.h stropts.h times.h ustat.h
모든 심볼릭 링크.
root@kali:/usr/include/sys# ls -la
total 32
drwxr-xr-x 2 root root 12288 Aug 23 21:18 .
drwxr-xr-x 76 root root 20480 Aug 23 21:34 ..
lrwxrwxrwx 1 root root 30 Feb 11 2016 acct.h -> ../x86_64-linux-gnu/sys/acct.h
lrwxrwxrwx 1 root root 30 Feb 11 2016 auxv.h -> ../x86_64-linux-gnu/sys/auxv.h
lrwxrwxrwx 1 root root 33 Feb 11 2016 bitypes.h -> ../x86_64-linux-gnu/sys/bitypes.h
lrwxrwxrwx 1 root root 31 Feb 11 2016 cdefs.h -> ../x86_64-linux-gnu/sys/cdefs.h
lrwxrwxrwx 1 root root 34 Feb 11 2016 debugreg.h -> ../x86_64-linux-gnu/sys/debugreg.h
lrwxrwxrwx 1 root root 29 Feb 11 2016 dir.h -> ../x86_64-linux-gnu/sys/dir.h
lrwxrwxrwx 1 root root 29 Feb 11 2016 elf.h -> ../x86_64-linux-gnu/sys/elf.h
lrwxrwxrwx 1 root root 31 Feb 11 2016 epoll.h -> ../x86_64-linux-gnu/sys/epoll.h
lrwxrwxrwx 1 root root 31 Feb 11 2016 errno.h -> ../x86_64-linux-gnu/sys/errno.h
lrwxrwxrwx 1 root root 33 Feb 11 2016 eventfd.h -> ../x86_64-linux-gnu/sys/eventfd.h
lrwxrwxrwx 1 root root 34 Feb 11 2016 fanotify.h -> ../x86_64-linux-gnu/sys/fanotify.h
lrwxrwxrwx 1 root root 31 Feb 11 2016 fcntl.h -> ../x86_64-linux-gnu/sys/fcntl.h
lrwxrwxrwx 1 root root 30 Feb 11 2016 file.h -> ../x86_64-linux-gnu/sys/file.h
lrwxrwxrwx 1 root root 31 Feb 11 2016 fsuid.h -> ../x86_64-linux-gnu/sys/fsuid.h
lrwxrwxrwx 1 root root 30 Feb 11 2016 gmon.h -> ../x86_64-linux-gnu/sys/gmon.h
lrwxrwxrwx 1 root root 34 Feb 11 2016 gmon_out.h -> ../x86_64-linux-gnu/sys/gmon_out.h
lrwxrwxrwx 1 root root 33 Feb 11 2016 inotify.h -> ../x86_64-linux-gnu/sys/inotify.h
lrwxrwxrwx 1 root root 31 Feb 11 2016 ioctl.h -> ../x86_64-linux-gnu/sys/ioctl.h
lrwxrwxrwx 1 root root 28 Feb 11 2016 io.h -> ../x86_64-linux-gnu/sys/io.h
lrwxrwxrwx 1 root root 29 Feb 11 2016 ipc.h -> ../x86_64-linux-gnu/sys/ipc.h
아, 그러면 그들이 어디를 가리키는지 확인해서 상태가 좋은지 확인할 수 있을 것 같아요.
root@kali:/usr/include/sys# cd ../x86_64-linux-gnu/
root@kali:/usr/include/x86_64-linux-gnu# ls
gnu
무엇을 기다립니다. 모든 것이 가리키는 sys 폴더는 어디에 있습니까?
root@kali:/usr/include/x86_64-linux-gnu# locate vfs.h
/usr/include/glib-2.0/gio/gvfs.h
/usr/src/linux-headers-4.0.0-kali1-common/include/linux/vfs.h
root@kali:/usr/include/x86_64-linux-gnu# locate cdefs.h
/usr/i686-w64-mingw32/include/sys/cdefs.h
/usr/include/bsd/sys/cdefs.h
/usr/share/mingw-w64/include/sys/cdefs.h
아직 여기에 없습니다. 여기서 정말 어리석은 것을 놓치고 있습니까? dkpg에서 게시한 파일이 설치되지 않는 이유는 무엇입니까? 무엇이 그들을 방해하고 있습니까? 그것들은 어디에 존재해야 하는가? cdefs의 Windows 전용 버전이 BSD 버전인 이유는 무엇입니까?
답변1
의견을 바탕으로 답변:
귀하의 질문에있는 명령은 길게 표시된 apt-get
다음 locate
따릅니다.
작동 방식은 locate
파일 시스템에 자체 파일 데이터베이스가 있다는 것입니다. 데이터베이스는 updatedb
일반적으로 매일 밤 에 의해 실행되는 명령을 사용하여 업데이트됩니다 cron
. 따라서 파일을 추가(또는 제거)한 후 즉시 사용하려면 루트로 직접 실행 locate
해야 합니다 . updatedb
그러면 locate
새 파일도 발견됩니다 .
find
Linux에서 작업하는 모든 프로그래머가 이 사실 을 알아두면 매우 유용합니다. 무언가를 설치한 후, 버전 제어 확인을 수행한 후 또는 빌드를 수행한 후 locate
.