기존 답변에서 설명한대로 double sort(double)
은 함수가 있음을 컴파일러에서 알 수있는 프로토 타입을 제공합니다.
그러나 GCC에서는 작동하지 않는다고 언급했습니다. C 또는 C++ 프로그램을 빌드하면 소스 코드가 오브젝트 형식으로 컴파일됩니다. 그런 다음 오브젝트 파일을 링크하여 실행 파일을 만듭니다.
는 동작에서 볼이 (-c) 소스 파일에서는 hello.c를 컴파일하기 위해 GCC를 알려줍니다
gcc -c hello.c
시도합니다. hello.c가 있고 오류가 없다고 가정하면 hello.o가 현재 디렉토리에서 발견됩니다. 지금 시도하십시오
이렇게하면 GCC가 hello.o를 적절한 시스템 라이브러리에 연결하고 "hello"라는 출력 파일을 생성합니다. 에서는 hello.c가 수학 함수를 사용하는 경우, 당신은 또한 수학 라이브러리에 링크해야합니다 :
이
gcc -o hello hello.o -lm
"-l"추가 라이브러리를 포함하는 GCC를 얘기하는 데 사용되는 (C 라이브러리 "libc의"기본 이상) . "m"은 sqrt
을 포함하는 수학 라이브러리 인 "libm"을 나타냅니다. 프로그램이 하나의 소스 파일을 사용하는 경우는 하나의 명령으로 컴파일 및 링크하는 암시 적으로 GCC를 요청하는 것이 일반적이다 :
gcc -o hello hello.c -lm
을 이제 귀하의 질문에. GCC는 수학 라이브러리에서 링크하도록 요청하지 않았기 때문에 위의 코드를 컴파일하지 않습니다. 하지만 g ++은 괜찮습니다. 이미 스택 오버플로에 similar question이 있습니다. 그 허용 대답,
에 따르면 C++ 런타임 된 libstdC++가 필요하기 libm의, 그래서 당신은 GCC와 (g를 ++)는 C++ 프로그램을 컴파일하는 경우, 당신은 자동으로 libm의은에 연결 얻을 것이다.
"libstdC++"는 C++ 언어 런타임 라이브러리이므로 기본적으로 g ++에 포함되어 있습니다. libm에 의존하기 때문에 링커는 최종 바이너리 프로그램을 생성하는 동안 libm을 자동으로로드합니다.
GCC 3.2 .... 대기, * * *? – Xeo