gcc compiler의 I 옵션의 위치에 대한 질문입니다.
안녕하십니까. 컴파일 하다가 이해 안 되는게 있어서 질문할라고 와보니... 전에 올린 글에 벌써 답글이 올라와 있네요. 고마워서 어쩌나.. ^^;
그래서! 이번 질문은! 제목 대로입니다.
제가 make를 잘 몰라서... 보통은 make 파일 안 만들고 그냥 컴파일하거든요. 그런데 make 파일을 꼭! 만들어야 할 때가 생기면,
여기저기(주로 인터넷)에서 Makefile 복사해서, 적당히 고쳐 씁니다.
근데, 오늘 커널 모듈 컴파일하다가 안되서 make파일 이러저리 뜯어보다가... 이상한 게 보이더라구요.
gcc의 I 옵션은 , include 할 때 header 파일의 추가를 위해 사용되는 걸로 알고 있는데요. 제가 복사한 Makefile에서는 이게 소스 파일 앞에 붙네요? 그러니까...
gcc -I/MyUsr/src/linux/include -c mymodule.c
이런 식으로요.
근데, 전에 어딘가 본 책에서, -L이랑 -l(소문자 L), -I는 소스 파일 앞에 붙이면 complie할 때(cc) 옵션으로 인식되기 때문에, link옵션에 적용 안 될 가능성이 있다. 그래서, 소스 파일 뒤에 붙여야 한다....라는 걸 읽은 기억이 납니다. (그래서 전 지금까지 위의 옵션은 모두 소스 파일 뒤에 붙입니다만...)
제가 잘못 알고 있는 건지요? 혹시 아시는 분 답변 해 주시면 감사하겠습니다. 참고로, 저는 옵션 위치를 바꿔서 에러가 났던 적은 없던 걸로 기억합니다.(물론 에러가 난 줄도 몰랐을 수도 있구요. :) )
링크할 때엔 -I 옵션이 필요 없습니다. -I 는 컴파일할 때에만 필요합
링크할 때엔 -I 옵션이 필요 없습니다. -I 는 컴파일할 때에만 필요합니다.
-----
http://monpetit.posterous.com/
http://monpetit.tistory.com/
Re: gcc compiler의 I 옵션의 위치에 대한 질문입니다.
기억이 흐려지신 것 같습니다. -I와 -L은 그 위치가 중요한 적이 없습니다.
다만 라이브러리를 지정하는 -lxxx은 그 위치가 대개 맨 뒤에 위치해야 했습니다.
(요사이 gcc는 상관없음) 또한 링크할 라이브러리가 여러 개인 경우, 이 순서도
중요합니다.
C FAQ: http://www.eskimo.com/~scs/C-faq/top.html
Korean Ver: http://cinsk.github.io/cfaqs/
소중한 답글 이제와서 찾았습니다만
-lm 옵션 때문에 한참을 헤멨습니다. ubuntu 11.10의 gcc에서 -lm 옵션을 소스파일 앞에 붙이면 링크에러가 나더라고요. -lm은 특별한 위치가 필요한가요? 아니면 다른 문제인가요?
소중한 답변 찾은 것을
소중한 답변 찾은 것을 감축드립니다.
하옵고,
static library 가 아닌 한 -l(소문자 엘)의 위치나 순서 역시 신경쓰시지 않으셔도 됩니다.
static library 일 경우, 똑똑한 링커가 사용되지 않는 심볼이라 판단하고 제외시켜 버리는 경우를 막기 위해 순서를 잘 지켜줘야 하고요.
static library 일 경우에도 순서를 무시하고 싶으시면 링커의 --start-group 과 --end-group 옵션을 찾아서 읽어보시고요.
링커에게 넘겨 줄 옵션이라는 것을 gcc wrapper 에게 알려주려면 -Wl 옵션을 사용하면 됩니다.
ubuntu 11.10 에서 뭐가 어떻게 잘못 됐는지는 잘 모르겠습니다.
개인적으론, ubuntu 는 장난감으로썬 그럭저럭 가지고 놀 만 하지만,
밥 벌어먹고 살 개발머신에 쓸 Operating System 이 아니라 생각하기 때문에 무척 너그럽게 그때그때 상황봐서 대강대강 처치하고 넘어갑니다.
대단히 질 나쁜 답변이지만, 원인을 찾아서 밝히기 보단 그냥 Makefile에서 적당히 처치하고 넘어가는 식으로 사용하세요 -.-;
대단히 질 나쁜 답변이 대단히 큰 도움이 됐습니다.
대단히 질 나쁜 답변이 대단히 큰 도움이 됐습니다. 감사합니다.
우분투 gcc는 요사이 gcc가 아니라고 생각하는 게 속 편하겠네요.
답변 감사합니다.
궁금했었는데... 결국 상관 없었던 거군요. -L만 신경쓰면 되는 거네요. -_-;
답변 감사합니다! 점심 맛나게 드세요!
댓글 달기