2008년 07월 08일
[C언어] 라이브러리Library 만들기와 링크Link
앞서 올린 동적메모리 malloc과 함수 포스트에서
메인함수부를 간결히 하기위해 메인 함수 밖에 다른 함수들을 선언하고
메인함수 내부에서 다시 그 선언한 함수들을 호출하여 사용하는 것을 포스팅했습니다.
그런데 이 경우 메인함수 내부는 간결해 졌지만 코드 전체적으로 볼 때, 간결해 진것은 아닙니다.
이번에는 라이브러리Library와 링크Link를 이용해
코드를 간결히 만드는 것을 알아보겠습니다.
[과정1]
먼저 MS Visual C++를 실행시키고 Project를 작성합니다.
Win32 Console Application 으로 작성합니다.
(여기서는 프로젝트명 example이라 하겠습니다)
[과정2]
프로젝트 작성 후 C++ Source File에서 새 파일을 하나 작성합니다.
(main.c라 하겠습니다. 작성시 확장자 .c를 써주지 않고 만들게 되면
c++ 파일인 .cpp로 저장이 됩니다. 여기서는 c를 쓸 것이기에 .c를 해줍시다.)
[과정3]
이 main.c에 저번에 작성한 소스코드(2번)를 복사 붙여넣기 해줍시다.
(위의 링크를 클릭하시면 새로 페이지 나오는데, 거기서의 소스코드2를 말하는 겁니다.)
[과정4]
아 여기서 잠깐. 여기서 다시 새파일을 작성합니다. 역시 C++ Source File 에서.
(sub.c라고 만들겠습니다.)
[과정5]
그리고 이 sub.c에 main.c에 있던 함수 중 메인함수를 제외한
다른 나머지 모든 함수를 잘라내어 붙여넣기 해줍니다.
(#include와 같은 함수 시작 전의 선언부 역시 복사해 붙여넣기 해줍니다.
main.c에는 #include<*>와 char *pList; int totalnum; 그리고 void main()이 남게되고,
sub.c에는 #include<*>와 char *pList; int totalnum; 그리고 main외의 함수들이 들어갑니다.
sub.c에서 char *pList; int totalnum의 앞에 모두 extern을 붙여줍시다.)
>image main.c
>image sub.c
[참고]
main.c와 sub.c 간의 페이지를 전환하려면
옆에있는 도구(?)의 아래쪽에 ClassView와 FileView중
FileView 탭을 클릭하고 'project명 files','Source Files'를 각각 더블클릭하면
main.c와 sub.c가 보이게됩니다. 여기서 main.c나 sub.c 를 더블클릭 하게되면
더블클릭한 파일로 페이지가 전환됩니다.
>image
[과정6]
여기서 다시 새파일을 작성합니다. 이번엔 C/C++ Header File 확장자는 .h로 합니다.
(func.h로 만들겠습니다.
Source Files 아래측에보면 Header Files가 있고 이것을 더블클릭하면 func.h가 있습니다)
[과정7]
func.h에 sub.c에 있던 함수명을 복사 붙여넣기합니다.
그리고 함수명 뒤에 ;(세미콜론)을 붙여줍시다.
>image
[과정8]
main.c로 돌아와 #include "새로만든헤더파일명.h" 를 추가해줍니다.
(필자의 경우는 #include "func.h")
<*>와 "*"의 차이는 헤더파일을 기본으로 설정된 폴더부터 찾을것인지
아니면 해당 프로젝트의 폴더부터 찾아 나갈 것인지의 차이)
(여기서 실행Ctrl+F5 해줘도 정상작동 합니다.)
[과정9]
이제 새로 VC++을 실행해주시고 Win32 Static Library 로 새 Project를 작성합니다.
(funclib로 만들겠습니다.)
[과정10]
그리고 C++ Source File 로 새 파일을 작성합니다
(function.c로 만들겠습니다.)
[과정11]
아까전의 sub.c의 내용전체를 복사 붙여넣기로 function.c에 입력합니다.
그리고 실행(상단의 !아이콘 혹은 Ctrl+F5)
실행 후 나오는 메세지에서는 Cancel.
이렇게하면 라이브러리Library파일(*.lib)의 추출이 완료됩니다.
[과정12]
과정11까지 완료 후 파일들이 저장된 폴더
(기본적으로 C:\Program Files\Microsoft Visual Studio\MyProjects\)
에서 두번째 프로젝트(필자는 funclib) 폴더를 찾아 그안의 Debug폴더를 열면
프로젝트명.lib(필자는 funclib.lib)라는 라이브러리Library파일이 있습니다.
이것을 복사하여 첫번째 프로젝트(필자는 example) 폴더 속에 붙여넣기 합니다.
[과정13]
다시 첫번째 프로젝트가 진행중인 VC++로 돌아와
상단 메뉴에서 Project-Settings...(단축키 Alt+F7)를 클릭해 창을 띄웁니다.
그리고 우측 상단의 탭에서 Link탭을 클릭하고
아래쪽의 Object/library modules: 에 커서를 두고
복사해서 붙여넣기 했던 lib파일명을 입력합니다.
>image
[과정14]
그리고 Source Files 목록에서 sub.c파일을 삭제해줍니다.
(sub.c를 선택하고 Delete키를 누르면 지워집니다. 아니면 폴더에서 직접 삭제해줘도 됩니다.)
그리고 Ctrl+F5 혹은 !아이콘을 클릭하여 실행시켜주면 정상적으로 실행됩니다.
정상적으로 실행되지 않았다면 다시한번 과정1부터 천천히 해보세요.
메인함수부를 간결히 하기위해 메인 함수 밖에 다른 함수들을 선언하고
메인함수 내부에서 다시 그 선언한 함수들을 호출하여 사용하는 것을 포스팅했습니다.
그런데 이 경우 메인함수 내부는 간결해 졌지만 코드 전체적으로 볼 때, 간결해 진것은 아닙니다.
이번에는 라이브러리Library와 링크Link를 이용해
코드를 간결히 만드는 것을 알아보겠습니다.
[과정1]
먼저 MS Visual C++를 실행시키고 Project를 작성합니다.
Win32 Console Application 으로 작성합니다.
(여기서는 프로젝트명 example이라 하겠습니다)
[과정2]
프로젝트 작성 후 C++ Source File에서 새 파일을 하나 작성합니다.
(main.c라 하겠습니다. 작성시 확장자 .c를 써주지 않고 만들게 되면
c++ 파일인 .cpp로 저장이 됩니다. 여기서는 c를 쓸 것이기에 .c를 해줍시다.)
[과정3]
이 main.c에 저번에 작성한 소스코드(2번)를 복사 붙여넣기 해줍시다.
(위의 링크를 클릭하시면 새로 페이지 나오는데, 거기서의 소스코드2를 말하는 겁니다.)
[과정4]
아 여기서 잠깐. 여기서 다시 새파일을 작성합니다. 역시 C++ Source File 에서.
(sub.c라고 만들겠습니다.)
[과정5]
그리고 이 sub.c에 main.c에 있던 함수 중 메인함수를 제외한
다른 나머지 모든 함수를 잘라내어 붙여넣기 해줍니다.
(#include와 같은 함수 시작 전의 선언부 역시 복사해 붙여넣기 해줍니다.
main.c에는 #include<*>와 char *pList; int totalnum; 그리고 void main()이 남게되고,
sub.c에는 #include<*>와 char *pList; int totalnum; 그리고 main외의 함수들이 들어갑니다.
sub.c에서 char *pList; int totalnum의 앞에 모두 extern을 붙여줍시다.)
>image main.c
>image sub.c
[참고]
main.c와 sub.c 간의 페이지를 전환하려면
옆에있는 도구(?)의 아래쪽에 ClassView와 FileView중
FileView 탭을 클릭하고 'project명 files','Source Files'를 각각 더블클릭하면
main.c와 sub.c가 보이게됩니다. 여기서 main.c나 sub.c 를 더블클릭 하게되면
더블클릭한 파일로 페이지가 전환됩니다.
>image
[과정6]
여기서 다시 새파일을 작성합니다. 이번엔 C/C++ Header File 확장자는 .h로 합니다.
(func.h로 만들겠습니다.
Source Files 아래측에보면 Header Files가 있고 이것을 더블클릭하면 func.h가 있습니다)
[과정7]
func.h에 sub.c에 있던 함수명을 복사 붙여넣기합니다.
그리고 함수명 뒤에 ;(세미콜론)을 붙여줍시다.
>image
[과정8]
main.c로 돌아와 #include "새로만든헤더파일명.h" 를 추가해줍니다.
(필자의 경우는 #include "func.h")
<*>와 "*"의 차이는 헤더파일을 기본으로 설정된 폴더부터 찾을것인지
아니면 해당 프로젝트의 폴더부터 찾아 나갈 것인지의 차이)
(여기서 실행Ctrl+F5 해줘도 정상작동 합니다.)
[과정9]
이제 새로 VC++을 실행해주시고 Win32 Static Library 로 새 Project를 작성합니다.
(funclib로 만들겠습니다.)
[과정10]
그리고 C++ Source File 로 새 파일을 작성합니다
(function.c로 만들겠습니다.)
[과정11]
아까전의 sub.c의 내용전체를 복사 붙여넣기로 function.c에 입력합니다.
그리고 실행(상단의 !아이콘 혹은 Ctrl+F5)
실행 후 나오는 메세지에서는 Cancel.
이렇게하면 라이브러리Library파일(*.lib)의 추출이 완료됩니다.
[과정12]
과정11까지 완료 후 파일들이 저장된 폴더
(기본적으로 C:\Program Files\Microsoft Visual Studio\MyProjects\)
에서 두번째 프로젝트(필자는 funclib) 폴더를 찾아 그안의 Debug폴더를 열면
프로젝트명.lib(필자는 funclib.lib)라는 라이브러리Library파일이 있습니다.
이것을 복사하여 첫번째 프로젝트(필자는 example) 폴더 속에 붙여넣기 합니다.
[과정13]
다시 첫번째 프로젝트가 진행중인 VC++로 돌아와
상단 메뉴에서 Project-Settings...(단축키 Alt+F7)를 클릭해 창을 띄웁니다.
그리고 우측 상단의 탭에서 Link탭을 클릭하고
아래쪽의 Object/library modules: 에 커서를 두고
복사해서 붙여넣기 했던 lib파일명을 입력합니다.
>image
[과정14]
그리고 Source Files 목록에서 sub.c파일을 삭제해줍니다.
(sub.c를 선택하고 Delete키를 누르면 지워집니다. 아니면 폴더에서 직접 삭제해줘도 됩니다.)
그리고 Ctrl+F5 혹은 !아이콘을 클릭하여 실행시켜주면 정상적으로 실행됩니다.
정상적으로 실행되지 않았다면 다시한번 과정1부터 천천히 해보세요.
이 글과 관련있는 글을 자동검색한 결과입니다 [?]
- lex & yacc 사용법 by mirwing
- 토탈커맨더 - 단축키 (Total Commander - Shortcut Keys) by dazzi
- WDM 개발을 위한 VC 셋팅 by 미친감자
- Hot-key for VS .NET by daftcoder
- C 포인터, 확실히 알자(4) - 함수와 포인터 by 시즈하
# by | 2008/07/08 22:50 | Source Code/File | 트랙백 | 덧글(0)










☞ 내 이글루에 이 글과 관련된 글 쓰기 (트랙백 보내기) [도움말]