본문 바로가기
개발하자

[Linux] shared library 사용하기

by 밈밈무 2021. 11. 29.

[SharedLib 예제]

1)Home directory에 SharedLibExample 디렉토리를 생성하고 해당 디렉토리로 이동한다.

2) vi editor로 main.c 를 작성한다.
-------------------------------------------------------------
#include <stdio.h>
#include "add.h"

void main(int argc, char* argv[])
{
        int result = 0;

        if (argc < 2) {
                printf("Usage : ./app.out <1st num> <2nd num>\n");
                return;
        }

        result = add(atoi(argv[1]), atoi(argv[2]));

        printf("Reuslt : %s + %s = %d\n", argv[1], argv[2], result);

        return;
}

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

3) vi editor로 add.h 를 작성한다.
-------------------------------------------------------------
#include <stdio.h>
#include <stdlib.h>

extern int add(int , int);
-------------------------------------------------------------

4) vi editor로 add.c 를 작성한다.
-------------------------------------------------------------
#include "add.h"

int add(int a, int b)
{
        int result;

        result = a + b;

        return result;
}
-------------------------------------------------------------

5) vi editor로 .bashrc(Home directory)의 제일 마지막에 아래 내용을 추가한다. (홈디렉터리에서 vi .bashrc 명령어 입력 후 추가)
LD_LIBRARY_PATH=/home/[본인ID]/SharedLibExample:$LD_LIBRARY_PATH
export LD_LIBRARY_PATH

🐤shared Library의 경우 라이브러리를 어디 라이브러리에서 갖고 와야하는지 path를 추가해야 함

6) 명령어 프람프트에서 아래 Command를 실행한다.

201LinuxEx185@linux01:~$ source .bashrc

6) 명령어 프람프트에서 아래 Command를 실행한다.

201LinuxEx185@linux01:~$ gcc –fPIC –c add.c 🐤 add.o 가 결과물로 나옴
201LinuxEx185@linux01:~$ gcc –shared –o libadd.so add.o 🐤 add.o 오브젝트 사용해서 libadd.so라는 shared object 만듦
201LinuxEx185@linux01:~$ gcc –o mytest main.c libadd.so 🐤main과 shared object를 dynamic linking -> libadd.so의 코드가 mytest실행파일에 들어가지 않음(실행(./mytest 1 2)할 때 link가 실시간으로 됨)

7) app.out을 아래와 같이 실행해본다.

201LinuxEx185@linux01:~$ ./mytest 1 2