2012-06-04 2 views
1

내가 맥 단말기에서 안녕하세요 세계 C 프로그램을 컴파일하기 위해 노력하고있어 나는 이러한 오류를 생성하고이 :권한 맥 터미널에서 안녕하세요 세계 C 프로그램을 컴파일하려고 거부 오류가

mysource.c:1:19: error: /usr/local/include/stdio.h: Permission denied 
mysource.c: In function ‘main’: 
mysource.c:3: warning: incompatible implicit declaration of built-in function ‘printf’ 

이 무엇 인 I (MYSOURCE는 .c 파일의 이름입니다) 단자에 입력 :

MacBook-Pro:~ drummer0014$ gcc mysource.c -o mysource 

내가 엑스 코드 3를 설치하고 난 그냥 엑스 코드 4.2 오늘 설치하고 같은 오류가 오전 그래서 같은 오류가 발생했다. 나는 눈 표범을 달리는 맥북에있다. 또한 gcc를 입력 한 다음 터미널로 파일을 드래그하여 전체 경로를 갖도록했지만 동일한 오류가 발생합니다. 어떤 도움이라도 대단히 감사하겠습니다.

내가 입력하면 GCC --verbose mysource.c -o 여기 MYSOURCE 내가받은 것입니다 :

Using built-in specs. 
    Target: i686-apple-darwin10 
    Configured with: /private/var/tmp/llvmgcc42/llvmgcc42-2336.1~3/src/configure --disable-   checking --enable-werror --prefix=/Developer/usr/llvm-gcc-4.2 --mandir=/share/man --enable-languages=c,objc,c++,obj-c++ --program-prefix=llvm- --program-transform-name=/^[cg][^.-]*$/s/$/-4.2/ --with-slibdir=/usr/lib --build=i686-apple-darwin10 --enable-   llvm=/private/var/tmp/llvmgcc42/llvmgcc42-2336.1~3/dst-llvmCore/Developer/usr/local --program-prefix=i686-apple-darwin10- --host=x86_64-apple-darwin10 --target=i686-apple-darwin10 --with-gxx-include-dir=/usr/include/c++/4.2.1 
Thread model: posix 
    gcc version 4.2.1 (Based on Apple Inc. build 5658) (LLVM build 2336.1.00) 
    /usr/llvm-gcc-4.2/bin/../libexec/gcc/i686-apple-darwin10/4.2.1/cc1 -quiet -v -imultilib x86_64 -iprefix /usr/llvm-gcc-4.2/bin/../lib/gcc/i686-apple-darwin10/4.2.1/ -D__DYNAMIC__ mysource.c -fPIC -quiet -dumpbase mysource.c -mmacosx-version-min=10.6.8 -m64 -mtune=core2 -auxbase mysource -version -o /var/folders/7r/7rMZhHx3F0WhnoyEK1zUgE+++TI/-Tmp-//ccaqeJkd.s 
ignoring nonexistent directory "/usr/llvm-gcc-4.2/bin/../lib/gcc/i686-apple-darwin10/4.2.1/../../../../i686-apple-darwin10/include" 
ignoring nonexistent directory "/Developer/usr/llvm-gcc-4.2/lib/gcc/i686-apple-darwin10/4.2.1/../../../../i686-apple-darwin10/include" 
    #include "..." search starts here: 
    #include <...> search starts here: 
    /usr/llvm-gcc-4.2/bin/../lib/gcc/i686-apple-darwin10/4.2.1/include 
    /usr/local/include 
    /Developer/usr/llvm-gcc-4.2/lib/gcc/i686-apple-darwin10/4.2.1/include 
    /usr/include 
    /System/Library/Frameworks (framework directory) 
    /Library/Frameworks (framework directory) 
    End of search list. 
    GNU C version 4.2.1 (Based on Apple Inc. build 5658) (LLVM build 2336.1.00) (i686-apple- darwin10) 
    compiled by GNU C version 4.2.1 (Based on Apple Inc. build 5658) (LLVM build 2336.1.00). 
    GGC heuristics: --param ggc-min-expand=150 --param ggc-min-heapsize=131072 
    Compiler executable checksum: e787fa4ffdc9e78ad5e913828c220d85 
    mysource.c:1:19: error: /usr/local/include/stdio.h: Permission denied 
    mysource.c: In function ‘main’: 
    mysource.c:3: warning: incompatible implicit declaration of built-in function ‘printf’ 
+1

은 약간의 소스를 포함하고 있습니다. 특히 메인이 어디에 있든 포함하면 – pb2q

+1

'main()'에서 소스가 어떻게 생겼습니까? 특히, printf와 관련이있다. – WrightsCS

+0

내 코멘트가 코멘트 열에 여기에 맞지 않는다. 오히려 내 대답을 참조하십시오. – thb

답변

0

그냥이처럼 mysource.c 모양을 했습니까? 그렇지 않으면 우리가 볼 수 있도록

#include <stdio.h> 

int main() 
{ 
    printf("hello, world\n"); 
    return 0; 
} 

, 당신은 mysource.c을 나열합니다?

+0

@STATUS_ACCESS_DENIED,'#include "x"'는'#include '와 다르게 동작합니다. 오류 메시지는'gcc'가 설치된 곳 이외의 다른 접두사에서 표준 헤더가되어야하는 것을 읽으려는 시도를 나타 내기 때문에 관련이있을 수 있습니다. – mlp

+0

@ mlp : 좋은 지적. – 0xC0000022L

0

mlp은 매우 중요한 사실을 지적했습니다. #include <stdio.h> 대신 #include "stdio.h"을 사용하면 헤더의 검색 (주문 등)이 달라집니다. 이것은 표준 헤더이기 때문에 먼저 #include <stdio.h>을 사용하여 다시 컴파일하십시오. 그게 도움이되지 않는다면 나는 그것이 허가 문제라고 생각해야한다고 생각합니다.


그것은 사용자가 특히 gcc의 헤더가 상주하는 위치, 즉 /usr/local/include/stdio.h에 액세스 할 수있는 매우 명백하다. sudo chmod o+rX /usr/local/include에게이 위치에 대한 읽기 권한을 부여하려면 (이 작업을 수행하려면 수퍼 유저 권한이 필요합니다!) 다시 컴파일하십시오.

지금 이유 :

mysource.c:3: warning: incompatible implicit declaration of built-in function ‘printf’ 

는뿐만 아니라 매우 분명하다. 사용 권한 문제로 인해 헤더 파일을 읽을 수없는 경우이 파일을 포함 할 수 없으며 C는 기본적으로 표준 동작으로 돌아갑니다. int 및 임의의 수의 매개 변수를 반환하는 함수를 가정합니다.


지금 여기 권한의 의미에 대한 100 % 아니지만, 더 높은 계층 구조의 최대 폴더 중 일부는 또한, /usr/local/usr 즉 고정 필요 가능성이 있습니다. 그러나 일반적으로 이것들은 최소한 헤더 파일처럼 include 아래의 평범한 것보다 비교적 여유있는 사용 권한을 갖습니다.

3

STATUS_ACCESS_DENIED은 (는) 일종의 정확하지만 아직 /usr/local의 사용 권한을 변경하지는 않습니다. 일반적인 Mac OS X 설치에서는 /usr/local이 사용되지 않습니다. 거기에 무엇이든 간다면 타사 소프트웨어입니다.

그래서 진짜 질문은 GCC가 헤더를 찾고 (찾는) 이유입니다. XCC에서 GCC를 실행하고 있지 않기 때문에 의심 스럽지만,/usr/local에 GCC의 써드 파티 버전이있다.

which gcc의 보고서는 무엇입니까? echo $PATH는 무엇을 표시합니까?

Xcode를 설치했을 때 UNIX Development 구성 요소를 설치 했습니까? 그렇지 않다면/Developer/usr/bin에있는 도구에 명시 적으로 액세스하거나 PATH의 초기에 해당 디렉토리를 추가해야합니다. 해당 구성 요소를 설치 한 경우 /usr/local/bin 또는 /usr/local/sbin보다 /usr/bin/usr/sbin이 PATH의 이전 버전인지 확인하십시오.


업데이트 :

흠, 당신의 gcc --verbose 출력의 흥미로운 부분입니다 : 난 그냥 내 시스템 및 llvm-gcc-4.2 (실제로 사용되고 컴파일러)에서 확인할

#include "..." search starts here: 
#include <...> search starts here: 
/usr/llvm-gcc-4.2/bin/../lib/gcc/i686-apple-darwin10/4.2.1/include 
/usr/local/include 
/Developer/usr/llvm-gcc-4.2/lib/gcc/i686-apple-darwin10/4.2.1/include 
/usr/include 
/System/Library/Frameworks (framework directory) 
/Library/Frameworks (framework directory) 
End of search list. 

같은 생산 검색 목록은 여기에 있습니다. 그래서, 컴파일러가 헤더에 대해 /usr/local/include을보고 정상적으로 보았을 것입니다. 그리고 /usr/include 앞에 보입니다. 거기에 헤더가있을 것이라는 것은 이상합니다.

sudo mv /usr/local /usr/local.bak 

또는 적어도 /usr/local/include/usr/local/lib을 :

나의 추천은 옆으로 /usr/local 이동이다

원래 깰 수 물건을 설치 무엇이든 타사 소프트웨어
sudo mv /usr/local/include /usr/local/include.bak 
sudo mv /usr/local/lib /usr/local/lib.bak 

, 그러나 적어도 다음 당신은 그것이 무엇인지 알 것입니다. 더 가능성이, 당신은 그 일을함으로써 어떤 문제를 발견하지 못할 것입니다.

+0

gcc는 다음을보고합니다./usr/bin/gcc echo $ PATH shows /Library/Frameworks/Python.framework/Versions/Current/bin:/usr/bin:/bin:/usr/sbin:/sbin:/usr/ local/bin :/usr/X11/bin – user1436241

+0

UNIX 개발 구성 요소를 설치했는지 여부는 확실하지 않습니다. 나는 표준 xcode 디스크 이미지를 설치했다. 나는이 물건에 매우 익숙하고 PATH에 일찌감치 그 디렉토리를 두는 것의 의미를 이해하지 못합니다. – user1436241

+0

OK, 그래서'which gcc' 결과가 좋습니다. 'gcc --version'는 무엇을 보여줍니까? 사실, 질문을 편집하여'gcc --verbose mysource.c -o mysource'의 결과를 보여주십시오.PATH에'/ Library/Frameworks/Python.framework/Versions/Current/bin'이 처음에는 이상하지만, 문제가 될 것이라고는 생각하지 않습니다. UNIX Development 구성 요소는 기본적으로 Xcode 3.x 및 4.2 설치 프로그램에서 사용 가능하지만 사용하지 못하게 할 수 있습니다. 당신이 그들을 해제하지 않은 경우 당신은 아마 괜찮을거야. –