헤더 파일의 내용은 실제 어떤 라이브러리를 링크하느냐
와는 직접적인 관계가 없습니다. 그저 컴파일 단계에서
필요한 정보를 얻기 위해 include하는 것뿐입니다. 실제
라이브러리를 링크하려면 -l 옵션으로 지정해주어야 합
니다. 단, 링커를 직접 이용하지 않고, gcc를 통해 링커를
불러서 쓸 경우, -lc는 자동으로 붙게 되어 있습니다. 즉,
stdio 등이 정의된 libc는 자동으로 링크됩니다. 반면에
math library를 위한 -lm 옵션은 직접 명시하지 않으면
링크되지 않습니다.
그리고, 윈도우에서 알아서 잘 되는건 링크 옵션 어딘가에
math library를 포함시키도록 되어 있기 때문이겠지요.
이건, 리눅스에서만 까다로운게 아니고 원래 C의 방식입니다.
: 구조는 대략 이렇습니다.
:
: #include <stdio.h>
: #include <math.h>
: .
: .
: .
:
: void main(void)
: {
: int x, y, z;
: .
: .
: .
:
: x = sin(...);
: .
: .
: .
:
: y = asin(...);
: .
: .
: .
:
: z = cos(...);
: .
: .
: .
: }
:
: .
: .
: .
:
:
: 다는 아니지만 대략 이렇게 생겼거든요.
:
: 그리고 gcc를 이용해 컴파일 하면...
:
: stdio.h는 되는데 math.h는 왜 안되는지...
:
: stdio.h가 되면 math.h도 되야 하는거 아닌가요?
:
: 그래서 <stdio.h> 대신에 "/usr/include/math.h"이렇게 절대 경로를 지정해 봤는데도 안되네요.
:
: 윈도우에서는 저렇게만 해도 알아서 잘 되던데...
:
:
:
: : : 원래 math.h는 표준 헤더 파일이 아닌가요?
: : :
: : : /usr/include/를 살펴보면 math.h가 있던데 sin(), cos()을 사용할 수가 없습니다.
: : :
: : : 지금은 잘 생각이 나지 않지만 컴파일 해보면 undefined reference라고 출력되던데...
: : :
: : : 도대체 왜이럴까요?
: :
: : 컴파일시 -lm 옵션을 붙혀야 할것 같습니다.
: : math 라이브러리를 써야거든요..