상세 컨텐츠

본문 제목

daemon 프로세스 구축 후 상대경로의 동적 라이브러리 불러오기

Computer Science/리눅스 기초

by 전산거북이 2026. 6. 5. 01:30

본문

daemon 프로세스는 현재 working directory를 / 로 잡아 만약 상대경로로 동적라이브러리를 불러온다면 정확한 위치를 잡아내지 못하는 단점이 있습니다.


이를 해결하려면 어떻게 해야할까요?

당연히 동적 라이브러리위 위치를 절대경로로 잡으면 되지만, 여러가지 이유로 그렇게 하기 어려울 때가 있습니다. /lib/usr/lib 등에 두면 아마 자동으로 라이브러리를 링크할 것 같지만, 상황상 그렇게 하지 못하는 경우도 있기 때문입니다.

이번 포스팅에서는 그 해결책을 C언어를 기준으로 설명해보도록 하겠습니다.


우선 프로세스를 daemon으로 만들기 전에 해 주어야 한다는 것이 전제로 붙습니다.

#include <unistd.h>
#include <libgen.h>
#include <stdio.h>
#include <limits.h>

char lib_path[PATH_MAX];

int getLibDir()
{
    char exe_path[PATH_MAX];

    ssize_t len = readlink("/proc/self/exe", exe_path, sizeof(exe_path) - 1);

    if(len != -1)
    {
        exe_path[len] = '\0';

        char* dir = dirname(exe_path);

        // 여기에 원하는 대로 라이브러리의 위치를 지정합니다.
        sprintf(lib_path, "%s/../lib/", dir);

        return 0;
    }
    else
    {
        return -1;
    }
}

readlink()를 통해 실제로 작동하고 있는 프로세스의 경로를 잡아줍니다.
그 다음, sprintf()로 경로 뒤에 원하는 대로 상대 경로를 지정해줄 수 있습니다. 이렇게 한다면 손쉽게 경로를 지정할 수 있습니다.
lib_path 변수에 값을 저장해 둔 뒤, 필요할 때마다 써먹을 수 있습니다.

단, 반드시 daemon 프로세스화 하기 전에 이 코드가 먼저 실행되어야 합니다. 그렇지 않으면 어차피 readlink()를 해봤자 /만 나오겠죠?

 

여기까지 데몬 프로세스에서 원하는 위치에 상대경로 라이브러리를 만드는 방법에 대해 알아보았습니다.
질문이나 잘못된 부분이 있다면 댓글로 알려주시면 감사하겠습니다.

관련글 더보기

댓글 영역