본문 바로가기

C++/CMake

산출물 관련 설정, 공유 라이브러리

[1. 개요]

리눅스 기준, 빌드 결과물이 공유라이브러리 (.so) 파일에 의존하는 경우

특히 boost 나 tbb 등 기본적으로 시스템에 설치 된 라이브러리가 아니라 별도 라이브러리 인 경우

 

프로그램 시작 시, 필요 한 공유 라이브러리를 로드 하지 못하여 실행하지 못할 수 있음.

윈도우의 경우 현재 디렉터리를 기준으로 찾는 시늉(?) 이라도 하는 것 같던데,

리눅스는 그렇지 않음.

 

여기서는 기본적으로 산출물이 공유 라이브러리를 찾는 기준을 설정하는 법을 정리한다.


[2. RPATH]

readelf -d "mybinary" 를 살펴 보면 RPATH 항목이 있음.

 

이 항목은 cmake 로 프로젝트 설정 시 

-DCMAKE_SKIP_BUILD_RPATH=TRUE 로 설정하면 제거 할 수 있으나,

 

서비스 환경에 배포 시, 의존 라이브러리를 찾는 수단으로 사용 할 수 있음

 

CMakeLists.txt 에서 set_target_properties 를 이용하여 임의의 파일 경로를 설정할 수 있다.

 

set_target_properties(mybinary
PROPERTIES
BUILD_WITH_INSTALL_RPATH TRUE
INSTALL_RPATH "/my/dep/lib/path"
)

'C++ > CMake' 카테고리의 다른 글

CMake command 정리 2  (0) 2023.06.07
리눅스 CMake 설치  (0) 2023.01.04
CMake command 정리  (0) 2022.03.06