일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
- DNN Accelerator
- AMBA
- gcc 컴파일
- pytest-pythonpath 설치 오류
- CDC
- linux makefile 작성
- Pyverilog 설치
- gpgpu-sim
- 딥러닝 가속기
- 컨벌루션 연산
- Pyverilog 실행
- CUDA
- linux c 컴파일
- 이진수 곱셈 알고리즘
- Design DNN Accelerator
- Data HAzard
- DNN 가속기
- systolic array
- Makefile compile
- 남산업힐
- 데이터 해저드
- CLOCK GATING
- Pyvrilog tutorial
- 대구 반도체 설계기업 특화
- 클럭 게이팅
- linux c++ 컴파일
- makefile
- pygraphviz 설치 오류
- Pyverilog 튜토리얼
- pyverilog 설치 오류
- Today
- Total
오늘은 맑음
linux 공유 라이브러리 본문
공유 라이브러리
: 프로그램이 시작할때 적재되는 라이브러리이다.
확장자는 .so이며 빌드시 실행파일에 포함시키지 않는다.
공유라이브러리들은 이름이 'lib'로 시작되고 '.so' 확장자를 갖는다. 또한 인터페이스가 바뀜에 따라 증가되는 기간과 버전넘버로 이루어진다.
모든 공유 라이브러리들은 'real name'이라고 불리는 실제 라이브러리 코드를 포함하는 파일을 가지고 있다. 'real name'은 불리는 이름에 기간,
공유 라이브러리를 이용하여 exe파일 만들기
func1.c : int형 a, b를 받아 a + b를 반환하는 함수
func2.c : char형을 포인터로 받아 출력하는 함수
func.h : func1.c와 func2.c 함수를 정의해준 헤더
tmain.c : func1.c와 func2.c를 호출해주는 main함수
Lib파일 생성 makefile
libfunc.so.1.0 : func1.o func2.o
gcc -shared -Wl,-soname,libfunc.so.1 -o libfunc.so.1.0 func1.o func2.o
sudo cp libfunc.so.1.0 /usr/local/lib
sudo ln -sf /usr/local/lib/libfunc.so.1.0 /usr/local/lib/libfunc.so.1
sudo ln -sf /usr/local/lib/libfunc.so.1 /usr/local/lib/libfunc.so
sudo ldconfig
func1.o : func1.c
gcc -fPIC -c func1.c
func2.o : func2.c
gcc -fPIC -c func2.c
clean:
@rm -rf *.o libfunc.so.1.0
exe파일 생성 makefile
exe : tmain.c func1.o func2.o
gcc tmain.c -o exe -lfunc
clean:
rm -rf *.o exe
위의 두가지 makefile을 만들어 주고 각 각 make -f name 명령어를 수행시켜주면 libfunc.so.1.0파일과 exe파일이 만들어지게 된다.
exe파일을 실행시키면 tmain.c에서 정의해준 대로 실행결과가 출력되게 된다.
명령어 |
설명 |
-fPIC |
프로세스의 가상 주소 공간 안의 다른 지역에 로드 될 수 있도록 코드를 컴파일 |
-Wl |
gcc에게 콤마로 부분된 다음 옵션을 링커에게 알려줌 |
-soname, libfunc.so.1 |
라이브러리에 대한 soname을 고정 |
ldconfig |
지정된 디렉토리를 찾아다니면서 발견된 각각의 동적 라이브러리에 대해 그 라이브러리의 soname에 의해서 불러지는 심볼릭 링크들을 만들어낸다. 위에 soname에 주어진 이름으로 새로운 심볼릭 링크를 만듦. |
-shared |
공유 라이브러리를 만드는 옵션 |
ln : link의 줄임말로써 리눅스 파일시스템에 링크파일을 생성한다.
-s : 심볼릭링크파일 생성
-f : 대상 파일이 존재할 경우에 대상 파일을 지우고 링크파일을 생성
공유 라이브러리의 장점 : 빌드시 실행파일에 포함시키지 않기 때문에 디스크 공간을 아낄수 있고 버그가 존재할경우 공유 라이브러리만 재배포하면 문제를 수정이 가능하다. 또한 다른 프로세스가 함수를 사용하여야 할 때 이전 프로세스가 로딩한 내용을 서로 공유하기 때문에 메모리 사용량을 절약할 수 있다.
공유라이브러리의 단점 : 파일을 배포할 때 라이브러리를 함께 배포해야 사용이 가능하다
'Linux' 카테고리의 다른 글
vim 상하 좌우 분할 (0) | 2019.10.18 |
---|---|
[Linux] makefile 사용해서 compile하기 (0) | 2019.03.13 |
linux 정적 라이브러리 사용 (0) | 2019.03.12 |
[Linux] linux에서 gcc(c/c++) compile하기 (0) | 2019.03.12 |
정적 라이브러리 (0) | 2017.12.08 |