>

투두 프로젝트를 컴파일하려고합니다 : https://github.com/meskio/tudu특정 문제가 발생했습니다 : sched.h  파일, 표준 라이브러리에서 사용 된 것과 동일한 이름 : libc6-dev:amd64: /usr/include/sched.h . 문제는 다른표준 라이브러리 헤더sched.h 를 포함 시키려고한다는 것입니다.  라이브러리 파일 대신 로컬 파일을 사용합니다. 오류가 발생합니다. 파일 이름을 수정하지 않고이 상황을 복구하기 위해 컴파일러 (경로 또는 sth 포함)를 설정할 수 있습니까?

여기에는 문제가있는 포함 작업이 있습니다 :

In file included from ./data.h:28,
     from ./sched.h:24,           // <- pthread.h includes local file
                                  // instead of /usr/include/sched.h
     from /usr/include/pthread.h:23,

업데이트 : gcc 문서에 규칙을 포함하여 조금 멍청한 것을 발견했습니다.

By default, the preprocessor looks for header files included by the quote form of the directive #include "file" first relative to the directory of the current file, and then in a preconfigured list of standard system directories. For example, if /usr/include/sys/stat.h contains #include "types.h", GCC looks for types.h first in /usr/include/sys, then in its usual search path.

For the angle-bracket form #include , the preprocessor’s default behavior is to look only in the standard system directories. The exact search directory list depends on the target system, how GCC is configured, and where it is installed. You can find the default search directory list for your version of CPP by invoking it with the -v option. For example,

제 시스템에서 두 번째 규칙이 사실이 아닌 것 같습니다. 왜 그런지 궁금합니다. 일반적으로 시스템 디렉토리에서 헤더를 찾습니다. 그렇지 않으면 pthread.h  포함되지 않습니다. 그러나 shed.h  cpp가 시스템 포함 경로와 "포함 된 파일과 동일한 경로"보다 현재 로컬 디렉토리를 선호 함을 보여줍니다. 이상한 ...


  • 답변 # 1

    문제가 내가 CPLUS_INCLUDE_PATH 를했다는 사실과 관련이 있음을 알 수있다  세트. 이 프로젝트의 문제는 해결되었지만 여전히이 이상한 행동을 이해하지 못합니다. 내 CPLUS_INCLUDE_PATH  다른 관련없는 디렉토리를 가리키고 있으므로이 프로젝트에 영향을 미치지 않아야합니다 (추가 이름 충돌을 일으키지 않았습니다). CPLUS_INCLUDE_PATH가 비어 있거나 존재하지 않는 경우 모든 것이 올바르게 빌드됩니다.

  • 이전 ruby - 거래 API에서 Ebay Australia 사이트 ID가 유효하지 않음 (수정 된 EbayR)
  • 다음 Angular 7에서 로컬 리소스를로드 할 수 없습니다