내 / usr / include / sys 디렉토리는 어디에 있습니까?


13

나는 최근에 Kubuntu 12.04에서 13.04로 업그레이드하여 완전히 다시 설치했습니다.

gcc 사용하기 4.7.3. /usr/include/sys디렉토리 가 없다는 것을 발견하기 위해 일부 프로그램을 컴파일했습니다 . 즉, types.h, stat.h, 등, 결석. include/linux디렉토리 에는 존재 하지만 존재 하지는 않습니다 include/sys.

무슨 일이야?


GCC가 인쇄하는 오류 메시지는 무엇입니까? 제발 편집 이 당신의 문제에 관련된 다른 정보를 제공 할 수있는 질문을.
edwin

1
필수 빌드를 설치 했습니까?
세스

내가 시도한 몇 가지 프로그램은 제대로 컴파일되므로 gcc에서 오류 메시지가 없습니다. 헤더가 어디에서 왔는지 알 수 없습니다. 함수 및 syscall 등에 대한 참조를 작성하는 편집기가 있는데 디렉토리를 찾을 수 없다는 것이 기쁩니다.
Duck

1
예, 빌드 필수가 최신입니다.
Duck

답변:


13

64 비트에서 Ubuntu를 사용하는 경우 (지금 32 비트 시스템에서 정확히 텍스트를 보낼 수는 없습니다) 질문의 디렉토리는 다음과 같습니다.

/usr/include/x86_64-linux-gnu/sys

이제이 정보 /usr/include/sys를 가지고 터미널에서이 파일을 사용하여 해당 위치에 파일이 실제로 필요한 경우 해당 파일에 대한 심볼릭 링크를 만들 수 있습니다 .

sudo ln -s /usr/include/x86_64-linux-gnu/sys/types.h /usr/include/sys/types.h
sudo ln -s /usr/include/x86_64-linux-gnu/sys/stat.h /usr/include/sys/stat.h

# ...etc

예, 64 비트 나는 다른 곳에서 비슷한 것을 읽었고 모든 것이 그 디렉토리에있는 것처럼 보이지만 헤더가 "#include sys / stat.h"에서 x86_64 / sys 디렉토리에 어떻게 포함되는지는 확실하지 않습니다. 이것이 새로운 gcc 주입 기능입니까? 간접적으로 나는 (외부 적으로)이 행동으로 이어지는 심볼릭 링크 등을 보지 못했습니다.
Duck

우리는 바람에 서로를 통과 한 것 같습니다. 결론은 컴파일러가 마술을하고 있지만 에디터를 행복하게하기 위해 심볼릭 해킹을 사용해야 할 수도 있습니다.
Duck

@Duck 난 그냥 :) 의견의 2 분 전에 내 대답을 편집
라두 Rădeanu

5

64 비트 Linux에서 작업하는 경우 libc6-dev-amd64를 설치하십시오. 우분투 터미널에서 다음 명령을 입력하십시오.

sudo apt-get install libc6-dev-amd64

1

sys 디렉토리는 많은 시스템 명령이있는 유닉스 / 리눅스 시스템 헤더 디렉토리입니다. 다른 브랜드 / 버전 리눅스는 다른 장소에 넣을 수 있습니다. 다음 명령이 도움이 될 수 있습니다.

find /usr/include -type d -name sys
On my ubuntu 16 got the two
/usr/include/bsd/sys
/usr/include/x86_64-linux-gnu/sys

첫 번째는 BSD 유닉스 시스템 헤더입니다.
두 번째는 Linux 64 비트 시스템 헤드를 포함하는 디렉토리입니다.

cmake가 sys / stat.h 파일을 찾을 수 없다는 문제가 발생합니다. 나의 임시 해결책은 상징적 인 링크를 만드는 것입니다

/user/local/include/sys/stat.h from /usr/include/x86_64-linux-gnu/sys/stat.h

/ usr / include 디렉토리를 오염시키지 않고 전체 sys 디렉토리가 아닌 하나의 특정 헤더 파일에만 링크를 만들고 있습니다. 나는 이것이 cmake의 결함이라고 생각하므로 링크를 하나만 만들어서 최소한의 영향을 미칩니다. 이것이 동일한 문제로 고통받는 사람들에게 도움이되기를 바랍니다.


1

gcc의 기본 검색 경로가 무엇인지 확인합시다. 에서 이 대답 , 우리는이 명령을 얻을 :

gcc -xc -E -v -

출력이 끝나면 내 컴퓨터에서 이것을 볼 수 있습니다.

ignoring nonexistent directory "/usr/local/include/x86_64-linux-gnu"
ignoring nonexistent directory "/usr/lib/gcc/x86_64-linux-gnu/4.8/../../../../x86_64-linux-gnu/include"
#include "..." search starts here:
#include <...> search starts here:
 /usr/lib/gcc/x86_64-linux-gnu/4.8/include
 /usr/local/include
 /usr/lib/gcc/x86_64-linux-gnu/4.8/include-fixed
 /usr/include/x86_64-linux-gnu
 /usr/include

두 번째 줄부터 마지막 ​​줄에 주목하십시오. 즉, C 파일을로 컴파일하면 #include <sys/stat.h>gcc는 심볼릭 링크없이 /usr/include/x86_64-linux-gnu/sys/stat.h시도하기 전에 검색합니다 /usr/include/sys/stat.h.


0

내 아키텍처는 amd64이므로 없습니다 libc6-dev-amd64. 설치할 패키지는 libc6-dev-i386입니다.

CPAN 패키지에 대한 종속성이 수정되었습니다.


'내 아키텍처가 amd64이므로 libc6-dev-amd64가 없습니다' : 무슨 의미입니까?
Marc Vanhoomissen

내 말은 x86_64 아키텍처, 라이브러리 / 커널 등입니다. 패키지에는 amd64 아키텍처가 있습니다. 따라서 libc6-dev-amd64를 설치할 수 없습니다. 여전히 문제가 지속되면 일부 소프트웨어는 / usr / include / sys /를 보게됩니다.
Jari Turkia
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.