반응형

출처:

www.cprogramming.com/tutorial/shared-libraries-linux-gcc.html


공유 라이브러리는 프로그램 실행 중에 필요한 함수를 불러내어 사용할 수 있으며,

또한 이 함수를 여러 프로세스에서 동시에 이용할 수 있게 하는 라이브러리이다.

위의 설명은 동적 라이브러리인 거 같으나, 거진 같은 의미로 사용하는 거 같았다.


이 공유 라이브러리의 확장자는 윈도우에서는 .dll, 리눅스에서는 .so 이다.


이 중 리눅스, GCC에서는 공유 라이브러리는 다음과 같이 한다.


gcc -fPIC -c [소스파일명]


여기서 PIC는 Position-Independent Code 라고,

메모리 어딘가에 위치하고 있으며 절대 주소에 상관없이 실행되는 기계어 코드이다.

(출처: https://en.wikipedia.org/wiki/Position-independent_code)

일단 이 옵션을 주어 오브젝트 파일이 어느 메모리 위치에서든 실행될 수 있게 만든다.


그리고 라이브러리를 만들기 위해 다음과 같이 -shared 옵션을 주어야 한다.


gcc -shared -o [라이브러리명] [소스파일명]


만들어진 라이브러리를 사용하기 위해서는 다음과 같이 컴파일한다.


gcc -L/[라이브러리 경로] ~ -l[플래그명]


-L 옵션은 라이브러리가 포함된 경로를 지정하기 위함이고

-l 옵션은 뒤에 적은 라이브러리를 포함하여 링크하란 뜻이다.

(출처:http://hoha.tistory.com/38)

어째서인지 내가 찾은 예들은 전부 절대 경로를 사용하고 있지만, 상대 경로도 사용할 수 있었다.


이렇게 해서 컴파일은 완료되었으나 실행되지 않는다.

실행하기 위해선 LD_LIBRARY_PATH에 라이브러리 경로를 추가해야 한다.


export LD_LIBRARY_PATH=./$LD_LIBRARY_PATH


문제는 이렇게 하면 쉘을 종료하면 이 변수는 다시 날아가버린다는 것이다.

그래서 .bashrc 같은 파일에 넣는 방법도 있겠으나,

이를 계속해서 컴파일하면서 쓸 것도 아닌데 굳이 넣어야 할 필요는 없을 것이다.

그러므로 쉘 스크립트 파일 하나 만들어서 거기에다 컴파일 명령어를 다 집어넣은 다음,

그 쉘 스크립트 파일을 source 명령어로 실행시키는 것이 가장 좋은 방법일 것이다.

반응형
Posted by 애콜라이트
l

free counters