C++ - [펌] Linux에서 정적 라이브러리 만들기
출처: [리눅스 정적 라이브러리 만들어 쓰기 | 작성자 라온이아부지 선성태] (http://blog.naver.com/r2adne/120127876141) |
순서
- 라이브러리로 쓸 함수가 포함된 파일 두개 만들기
- 컴파일 해서 오브젝트로 만들기
- 두개의 오브젝트를 하나의 라이브러리로 합치기
- 라이브러리를 사용할 메인프로그램 코딩
- 라이브러리를 포함해서 컴파일
- 동작 실행
라이브러리로 쓸 함수가 포함된 파일 두개 만들기
//file1.c
#include <stdio.h>
void test1()
{
printf(" test 1 \n");
}
void test2()
{
printf(" test 2 \n");
}
//file2.c
#include <stdio.h>
void test3()
{
printf(" test 3 \n");
}
두 파일에 포함된 함수들은 단순히 호출되면 일정문구를 출력 하는 기능을 하지만, 라이브러리 동작 테스트 하기에는 큰 무리가 없어 보인다.
컴파일 해서 오브젝트로 만들기
#gcc -c file1.c file2.c
c 옵션은 오브젝트 파일을 만드는 옵션이다. 오브젝트 파일은 .o 확장 자를 가지며, elf 바이너리 구조이다.
결과물 : file1.o file2.o
두개의 오브젝트를 하나의 라이브러리로 합치기
#ar rscv libstatic.a file1.o file2.o
- 두개의 오브젝트 파일을 libstatic.a 파일로 합친다.
- ar은 tar 과 비슷하며, archive 를 뜻한다.
- 옵션 rscv 에 대한 설명이 자세히 나온곳은 아무데도 없는것 같고. ar 옵션을 검색해 보니 몇가지 나오긴 했다.
- ar 옵션
- t : library 내용보기
- p : library 소스보기
- r : library insert or replace
- s : Index 생성
- x : 묶은 파일 풀기
- d : 삭제
결과물 : libstatic.a
라이브러리를 사용할 메인프로그램 코딩
//test.c
#include <stdio.h>
#include "mylib.h"
int main()
{
test1();
test2();
test3();
return 0;
}
많은 사람들이 이와 비슷한 소스를 가지고 테스트를 하는듯 하며, 정확한 출처는 한빛미디어에서 나온 ‘유닉스.리눅스 프로그래밍 필수 유틸리티’ 라는 책임을 밝힌다.
라이브러리를 포함해서 컴파일
#gcc -o test test.c -L./ -lstatic
동적라이브러리 작성시 먼저 설명한 부분이지만… 마지막 -l라이브러리이름 부분은 반드시 lib이름 형태로 파일명을 작성하고, 이부분에 lib 를 ㅃ개 -l 을 넣어야 정확히 동작된다.
결과물 : 실행파일
동작
#./test test 1 test 2 test 3 #
이 글은 2019-04-20에 작성되었습니다.