리눅스 컴파일 오류 문제에 관한 질문 올립니다 ....

moon1t16의 이미지

일단 제가 지금 해야할 목적부터 설명해 드리겠습니다.

전 현재 무선공유기 회사에서 소프트웨어 쪽으로 들어온 신입이며

저희 회사에서 공장으로 펌웨어를 하나 보내주어야 하는 상황인데

전원 퇴직하고 신입인 제가 지금 여기 남아서 담당하고 있습니다.

당연히 아는건 거의 없으며 리눅스 접해본적도 거의 없으니

"공부하라" 라는 답변은 양해 부탁드립니다.

우선 문제점을 설명해드리겠습니다.

회사 윗분이 저에게 이러한 지시를 내려주셨었습니다

" ft 라는 폴더가 있을 것이다. 그 안에서 파일 찾아서줘 "

...

.....

.........

한참 멍때렸습니다...

아 이게 무엇인가..? 내가 뭘 드려야 하는 것인가...?

그래서 파일의 원천부터 알아보니...

무선공유기와 pc와 연결하여 pc 익스플로러에서 아이피치면 무선공유기 설정화면 나오자나요?

이 때 빌드된 파일이 필요하답니다...

빌드된파일이라...

제가 아는 상식선에서는 ... 컴파일을하면 왠지 아웃풋 파일로 빌드파일이 생성될 것 같습니다.

확장자라던지 빌드파일이 어떻게 생겨먹었는지는 안봐서 모르겠네요... (답답)

어찌됬던 저희 회사 리눅스 서버에 들어가서 이것저것 찾다보니 어느 계정에 ft 라는 디렉토리가 있더군요.

그래서 바로 제 계정으로 안전하게 복사하여 그곳에서 작업을 하였습니다.

명령어 순서는

1. make clean (뭔진 몰라도 왠지 하면 깔끔해질 것 같아서 습관적으로 합니다.)

2. make dep (컴파일 시작 확인이라는데 뭐하로 하는진 모르겠네요)

3. make (이게 컴파일 맞죠?)

그러하온데... 오류가 뜨더군요...

여담이 길었네요... 답변자 분께 분위기를 이해시키느라..ㅠ

스샷을 첨부되지않아 컨트롤 cv로 보여드리겠습니다.

[sangsoo@localhost webtest1]$ cd ft
[sangsoo@localhost ft]$ ls
History Uboot config config.in diff.txt lib sdk_version.h tools user
Makefile autoconf.h config.arch dhcp_option images linux-2.6.21.x svn uClibc++ vendors
[sangsoo@localhost ft]$ make clean

이렇게 make clean 했고요...

make 하니까..

make[1]: Entering directory `/home/sangsoo/webtest1/ft/uClibc++'
make[1]: `all'를 위해 할 일이 없습니다
make[1]: Leaving directory `/home/sangsoo/webtest1/ft/uClibc++'
make[1]: Entering directory `/home/sangsoo/webtest1/ft/lib'
make[2]: Entering directory `/home/sangsoo/webtest1/ft/lib/extra/config'
/bin/sh: lkc_defs.h: Permission denied
make[2]: *** [lkc_defs.h] Error 1
make[2]: Leaving directory `/home/sangsoo/webtest1/ft/lib/extra/config'
make[1]: *** [include/bits/uClibc_config.h] 오류 2
make[1]: Leaving directory `/home/sangsoo/webtest1/ft/lib'
make: *** [lib_only] 오류 2

보이시는바와 같이 오류가 뜹니다....

아는 지인분 말 들어보니 일반적인 오류는 아닌것 같다..?

프로그래머가 일부로 걸어놓은것 같다..?

컴파일 옵션이 있을 것이다..?

뭐 이런저런 가정을 늘어세우고 리눅스 초보인 저에게 해답은 주지 않더군요...

참고로 이거 작업했던 근무자분은 퇴직했으며 전화연결조차 힘든 상황입니다.

제가 지금 궁금한건

여기서 컴파일하면 과연 빌드파일이 나올것인가 라는 점과

이 오류를 해결할 수 있는 방법을 찾고 싶습니다.

그리고 네이트온 abc1000krkr@yahoo.co.kr 꼭 좀 친추 걸어주셨으면 24시간내에 수락하겠습니다.

이 불쌍한 신입에게 멘토가 되어주실 분들 정말 간절합니다..

열심히 해보고싶은데 사수가 없으니 진전이 없네요...

꼭 좀 부탁드려요....

세벌의 이미지

ls -l 해 보세요.
lkc_defs.h: Permission denied
일단 이게 문제인 거 같은데... 저보다 고수님들이 도와 주실 듯.

addnull의 이미지

make란 명령어는 makefile (Makefile)이란 이름의 파일에 적혀있는 명령어들을 읽어와서 수행합니다.
간단하게 이해시켜드리자면, make는 빌드하는 툴이라기보다 그냥 makefile 한 줄씩 읽고 실행하는 역할이죠.
makefile 열어보시면 gcc 또는 g++로 시작하는 명령어가 실제 컴파일&빌드에 관한 내용입니다.

http://wiki.kldp.org/KoreanDoc/html/GNU-Make/GNU-Make-7.html
에 해당 파일에 대한 자세한 설명이 나와있습니다.

make 뒤에 붙는 "clean", "all", "dep"... 의 의미는 makefile에서 정의된 규칙(make의 옵션 아닙니다 ㅎㅎ)인데요.
makefile 중간에
"clean : "
"all : "
"dep : "

이렇게 정의된 걸 말합니다. (그리고 단순히 "make" 라고 실행하시면 "make all"이랑 같습니다.)

보여주신 오류 "'all'를 위해 할 일이 없습니다" 라는 의미는
makefile 내에 "all : " 밑에 아무런 내용이 없다는 걸 의미합니다.

단순한 makefile을 예를 들면

-------------------------------------

all :

dep :
gcc -o output test.c
echo 'can I come back home now?'

clean :

-------------------------------------

이런 식이면 all 이라는 규칙아래 아무런 명령어가 없는 거죠. (위에 예제에선 clean 도 마찮가지죠?)
그럼 "make"를 실행하시면 (또는 "make all", "make clean") 할 일이 없다는 메시지가 뜨는 거죠.

하지만 "make dep"이라고 실행하면 바로 밑에 있는 두 라인을 실행합니다.
앞서 말씀드렸듯이 여기서 "make dep" 하시는 건 아래 두 라인을 한줄씩 copy&paste로 실행한거랑 같습니다.

그리고 규칙 이름으로
all, clean, dep... 이런 이름들은 그냥 관용적(가장 널리 쓰이는)으로 쓰는 겁니다.
어쩌면 makefile 작성자 분께서 쓰고 싶은 이름으로 마음대로 정의하셨을 수도 있습니다.
makefile 부터 확인해보시는게 좋겠네요.

도움이 되셨길..

익명 사용자의 이미지

지금은 퇴직했지만 전임자에게 전화해서 물어보는 거지요.

biiiiid의 이미지

신입한테 이런식으로 일을 시키는 직장이라면 ....
할말이 많지만 생략하고요.

혹시 본인 계정으로 카피해오시는 중에, 권한문제는 없었는지,
카피한 파일은 모두 본인이 owner로 있는지가 궁금하네요.
(결국 ls -l 해보시라는 뜻이고요..)

정상적인 상황이라면, 의외로 쉽게 해결될 수 있는 문제이니,
차근차근 살펴보세요..