Ubuntu에서 C언어 math.h해더의 pow함수를 사용할 때 컴파일이 되지않는 경우가 있습니다

pow(10,3);

과 같이 인자들을 모두 숫자로 해주면 컴파일이 되지만

int a=3;
double b=pow(10,a);

이런식으로 해주면 컴파일이 되지않습니다

함수 오버라이딩때문인가해서 형변환을 해줘도 마찬가지입니다

해결법을 아시는분은 답변부탁드리겠습니다

$ make test
cc test.c -o test
/tmp/ccMNprYw.o: In function main': test.c:(.text+0x24): undefined reference to pow’
collect2: ld returned 1 exit status
make: *** [test] 오류 1

math 라이브러리를 사용 하려면 컴파일 할 때 -lm 옵션을 주셔야합니다.

math.h를 쓸경우 -lm 해주는 게 정답입니다. 링커가 pow 함수콜을 해당 라이브러리에 매칭해주는거죠.
pow(10,3)의 경우 왜 에러가 안날까 생각해보니, 이미 답이 정해져 있는 함수콜이므로 함수콜을 수행하는 코드 생성을 안하고, double의 숫자 1000f로 치환한 듯 보이네요.
그러면 a=3, pow(10,(double)a) 의 경우 함수콜로 코드 생성을 하기 때문에 에러가 발생한다는 건데, 이 정도는 컴파일러의 최적화가 수행된다면 숫자로 치환이 가능하다는 것을 쉽게 발견할 수 있습니다.
예상대로 gcc test.c -o test -O1 처럼 최적화 단계 옵션(-O1)을 주니 링커 에러가 발생하지 않는군요.
vio님 덕분에 몰랐던 내용을 자세히 생각해보는 계기가 되었습니다. ;)

-l 옵션을 이용하여 원하는 라이브러리를 사용하겠다고 해줘야하는군요
덕분에 새로운 사실을 알게되었습니다
두 분 모두 감사드립니다

[quote="vio":3up73hzb]-l 옵션을 이용하여 원하는 라이브러리를 사용하겠다고 해줘야하는군요
덕분에 새로운 사실을 알게되었습니다
두 분 모두 감사드립니다[/quote:3up73hzb]

이제 make를 익히셔서 컴파일할 때 마다 옵션을 주시지 않고 빌드하실 차례이옵니다. ;)