2011-03-19 17 views
5

누군가가 내게 왜 특히 우리가 ./a.out을 사용하여 프로그램을 실행하는지 설명 할 수 있습니까?리눅스에서 C 프로그램 실행

의미가 있습니까?

누군가 설명을 제공해 주시겠습니까?

+2

SO를 잘 받았습니다. 좀 더 정확하게 질문을 공식화 해주십시오. 당신이 이해하지 못하는 것은 무엇입니까? '. /'앞의'. 'a.out' 그 자체? 어떤 종류의 * 의미 *를 찾고 있습니까? –

답변

3

./ 부분을 의미하는 것은 안전을위한 것입니다. Windows는 기본적으로 현재 디렉토리를 PATH에 추가합니다.이 디렉토리는 좋지 않습니다 (DLL 삽입 등의 위험이 있습니다). a.out 부분을 의미하는 경우 gcc -o 매개 변수를 수정하여 변경할 수있는 이름 (형식 a.out 형식의 이름) 일뿐입니다.

+0

다른 방법. 형식 "aout"(더 이상 현대 시스템에서 사용되지 않음)의 이름은 유닉스 시스템에서 "어셈블러 출력"을위한 전통적인 파일 이름 인 파일명'a.out'에서 왔습니다. –

9

이름은 "assembler output"이며 컴파일러에서 생성 된 실행 파일의 기본 이름이었습니다. 현재 디렉토리 (.)가 $PATH이 아니기 때문에 ./이 필요하기 때문에 실행 파일의 경로를 명시 적으로 지정해야합니다.

2

bash와 같은 쉘처럼 실행 파일을 실행하려면 bash의 실행 파일을 찾아서 프로그램을 찾아 실행해야합니다.

접두사는 실행 파일의 전체 경로를 지정하기위한 축약 형 방식이므로 bash는이를 실행하기 위해 PATH 변수 (일반적으로 현재 디렉토리를 포함하지 않음)를 참조 할 필요가 없습니다.

는 [더 출력 파일 이름이 지정되지 않은 경우 ("어셈블러 출력"의 줄임말) a.out를 들어, gcc 같은 컴파일러의 기본 실행 파일 출력입니다.]

0
gcc -o mynewprogram mynewprogram.c 

의 a.out이의 기본 이름입니다 컴파일러. AFAIK는 연결 프로세스가 건너 뛰고 객체 또는 라이브러리로 컴파일되지 않기 때문입니다.

+2

어쨌든 이것은 * 뒤에있는 * 의미를 설명하지 않습니다. –

+0

그것은 구문 일뿐입니다. 용서해주십시오. – Bytemain

1

C로 더 자세히보고 싶다면 C 프로그램이 으로 컴파일 된입니다.

기본적으로 소스 코드는 #define#include 같은 지침 (예를 들어 메모리에)로드 된 전처리로 전송됩니다. 따라서 사용하려는 라이브러리가로드됩니다.

#include <math.h> 

것이다 기본적으로 '붙여 넣기'가 정의되는 지점에서 소스 코드에 math.h의 내용을 표시합니다. 이 모든 물건이 밖으로 확장되면

컴파일러 바이너리 코드의 소스입니다 오브젝트 코드,에 소스 코드를집니다. a.out 빌드 이름을 지정하지 않으면이 출력의 기본 이름입니다.