-dev 는 무슨 의미 인가요?

대부분 언어 패키지를 보면,
-dev 가 붙은 버젼이 따로 있던데 차이가 무엇인가요?

예를 들면 package목록에

php5 가 있고
php5-dev 가 있습니다.

다른 많은 패키지들도 그렇던데…
차이점이 궁금 합니다.

dev는 소스가 들어있습니다.

php는 php가 컴파일된 파일만 들어있고

dev는 php에서 소스파일과 header 파일등이 있는걸로 알고 있습니다.

openssl을 예로 들면
openssl lib로 프로그램을 만들려면 openssl만 설치해서

header 파일이 없어서 개발을 하지 못합니다.

그때 dev 패키지 받아서 설치해서 사용합니다.

나머지 정확한건 다른 분들이 해주실꺼 같습니다. ^^;;

-dev는 데비안에서 사용하던 페키지 방식으로 알고 있습니다.
우분투의 모체가 데비안이라, 우분투에서도 -dev 페키지를 쓸 수 있습니다.

또한 -rpm 이라는 페키지도 있는데, 이는 레드햇의 페키지 방식 입니다.
-rpm을 -dev로 변환해주는 "에일리언"이란 툴도 있습니다.

[b:1ze7hmd9]dev[/b:1ze7hmd9]elopment 개발 관련 파일들을 의미합니다.

들어있는 내용물이 패키지마다 다르지만
*-dev 패키지에는 주로 *.h, *.so(링크), 개발 관련 파일 등이 들어있다고 보시면 됩니다.

나머지 설명은 다른 분께 패스…

[quote="cogniti":r9654sdy][b:r9654sdy]dev[/b:r9654sdy]elopment 개발 관련 파일들을 의미합니다.

들어있는 내용물이 패키지마다 다르지만
*-dev 패키지에는 주로 *.h, *.so(링크), 개발 관련 파일 등이 들어있다고 보시면 됩니다.

나머지 설명은 다른 분께 패스…[/quote:r9654sdy]

이 안에 포인트가 다 들어있습니다 :)
프로그래밍 언어들은 보통 제대로 가동하기 위해서 라이브러리라는 것을 필요로 합니다. (줄여서 lib라고 표현됩니다)

*.h
.h로 끝나는 파일들은 C와 C++에서 사용되는 것으로 헤더(Header)의 약자입니다.
이것은 내부를 들여다 볼 수 있는 소스코드로 되어 있습니다.
한마디로 글자를 적어 놓은 문서파일이지요.

*.so
우분투 폴더 중 /lib과 /usr/lib 폴더를 열어보면 [b:r9654sdy]얼씨구.절씨구.so 혹은 so.1[/b:r9654sdy] 등으로 끝나는 파일들이 있습니다.
이것은 내부를 들여다 봐도 아무것도 알 수 없습니다.
이미 컴파일이 완료된 바이너리의 집합입니다.
다만 이것 자체로는 아무것도 할 수 없습니다.

이 두 가지는 공장 업무에 빗대어 쉽게 설명하자면

*.h 파일은 공장 내 사원들의 업무규정입니다.
작업하는데 필요한 기계의 작동법부터 퇴근 전 작업장 뒷정리 시에는 뭘 어떻게…등등이 적혀있는 문서입니다.
당연히 작업효율을 끌어올리고 신입교육(?!)을 위해서는 이런게 있는 편이 효율적이지요.
물론 사람이 알 수 있는 글자로 되어 있기 때문에 누구나 글(프로그래밍 언어)만 알고 있다면 읽고 사용할 수 있습니다.

*.so 파일은 자동 생산 라인에 배치된 기계입니다.
자, 여기 자동차 공장이 있습니다. 그리고 보통 자동차 공장은 거의 대부분 자동 생산 라인을 갖추고 있지요.
자동차 공장에서 일하는 사람들은 생산 라인의 어느 부분이 어떤걸 만들어 내고 다음은 뭘 할지는 알 수 있지만
막상 그 일을 하는 기계 내부구조는 모르는 상태입니다. 그리고 그 기계들이 문제없이 잘 작동한다면 알 필요도 없지요.

그리고 dev 혹은 lib가 붙은 패키지들은 저런 것들을 담고 있습니다.
물론 반드시 *.h나 *.so 의 형태가 아닐수도 있습니다.
하지만 그 구성과 구조는 모두 같다고 보시면 됩니다.

deb는 데비안 계열에서 사용되는 패키지의 확장자입니다.
유래는 [b:r9654sdy]Deb[/b:r9654sdy]ian의 deb입니다. Gnu is Not Unix와 같은 재귀를 이용한 일종의 말장난으로 탄생했습니다. (혹은 이름짓기 귀찮았다고도 합니다.)
우분투를 사용하면서 흔히 보는 apt-get…은 실은 dpkg의 프론트앤드 프로그램입니다.
실제 deb파일을 설치하는 방법은

dpkg -i asdf.deb

입니다.
apt-get은 우리가, 혹은 이미 설정된 네트워크 저장소를 통해 자동으로 패키지를 다운받고 설치해주는 일을 하는겁니다.

그와 반대로 레드햇 계열의 RPM이 있습니다.
이건 Redhat Package Manager라는 성의있어 보이는 이름이 붙어 있습니다.
세부적으로 돌아가는 구조에는 약간 차이가 있지만, 막상 사용법은 모양만 틀리지 똑같습니다.

rpm -i adsf.rpm

이러면 설치 됩니다.
그리고 apt-get과 대응되는 녀석은 yum이라고 하지요.

주절주절 늘어놨습니다만, 궁금증이 해소되셨기를 바랍니다.

.so 는 명칭이 shared object 이고 MS윈도우에 대응되는 것으로 .dll(dynamic link library) 이 있습니다.
프로그램 실행 중(runtime)에 동적으로 링크되는 라이브러리입니다.
.so 말고… .a 라는 것도 있습니다. 이것은 정적으로 링크되는 라이브러리입니다.

.c 소스를 컴파일할 때 .so 또는 .a 를 링크할 수 있는데…
.so 를 링크하면 a.out 을 실행할 때 해당 .so 파일이 필요합니다.
.a 를 링크하면 a.out 에 .a 라이브러리가 합체되어 .a 없이도 프로그램이 돌아갑니다. 대신 파일이 커지고 버전 관리가 .so를 링크한 것보다는 약간 어려워집니다.

위에 말한 컴파일할 때 라이브러리 링크 의미랑 아래 있는 링크 파일하고는 다른 의미입니다.

[code:kr9j6asg]
/usr/lib$ ls -al libpng*
-rw-r–r-- 1 root root 178542 Jun 26 2010 libpng12.a
lrwxrwxrwx 1 root root 18 Apr 26 21:39 libpng12.so -> /lib/libpng12.so.0
lrwxrwxrwx 1 root root 9 Apr 26 21:39 libpng12.so.0 -> libpng.so
lrwxrwxrwx 1 root root 10 Apr 26 21:39 libpng.a -> libpng12.a
lrwxrwxrwx 1 root root 11 Apr 26 21:39 libpng.so -> libpng12.so
[/code:kr9j6asg]

간단하게 말하자면 .so 와 .a 는 라이브러리입니다.

그리고 패키지 이름 중에 dbg 라는 것이 붙는 것(예를 들면 php5-dbg)이 있는데…
dbg 는 [b:kr9j6asg]d[/b:kr9j6asg]e[b:kr9j6asg]b[/b:kr9j6asg]u[b:kr9j6asg]g[/b:kr9j6asg] 를 의미합니다. 디버깅 심볼이 실행 파일 내에 들어 있어서…
gdb 같은 디버거로 정보를 들여다 볼 수 있습니다.

[quote="IceCube":11a8t670]-dev는 데비안에서 사용하던 페키지 방식으로 알고 있습니다.
우분투의 모체가 데비안이라, 우분투에서도 -dev 페키지를 쓸 수 있습니다.

또한 -rpm 이라는 페키지도 있는데, 이는 레드햇의 페키지 방식 입니다.
-rpm을 -dev로 변환해주는 "에일리언"이란 툴도 있습니다.[/quote:11a8t670]
-dev가 아니라 .deb입니다.

[quote="jincreator":1upbj59l][quote="IceCube":1upbj59l]-dev는 데비안에서 사용하던 페키지 방식으로 알고 있습니다.
우분투의 모체가 데비안이라, 우분투에서도 -dev 페키지를 쓸 수 있습니다.

또한 -rpm 이라는 페키지도 있는데, 이는 레드햇의 페키지 방식 입니다.
-rpm을 -dev로 변환해주는 "에일리언"이란 툴도 있습니다.[/quote:1upbj59l]
-dev가 아니라 .deb입니다.[/quote:1upbj59l]

아 제가 큰 실수를 했네요.
질문하신 분에게 맞추어 대답을 한다는 것이("."을 "-"로 이해하시는 줄 알고), 오히려 제가 질문을 잘못 봤네요.
알려주셔서 감사합니다.