No Rules Rules

VS2022를 이용한 라이브러리 추가 방법 (feat. Visual studio 2022, 리눅스, 정적 라이브러리, 동적 라이브러리) 본문

생활/업무

VS2022를 이용한 라이브러리 추가 방법 (feat. Visual studio 2022, 리눅스, 정적 라이브러리, 동적 라이브러리)

개발하는 완두콩 2022. 8. 7. 22:19
728x90
반응형

최근 담당하는 과제에서는 VS2022을 이용해서 개발하고 있습니다.

탑재되는 장비에는 리눅스 계열 OS가 올라가 있구요.

이전 개발 중 가장 불편했던 점이 바로 디버깅이었는데, 이러한 부분을 해소하고자 시작한 시도였습니다.

 

최근 업체에서 만들어주신 라이브러리를 사용할 일이 있었는데요.

기존에 제가 링킹해서 사용하던 라이브러리는 동적 라이브러리(.so) 였고 업체로부터 전달받은 라이브러리는 정적 라이브러리(.a) 였습니다.

따라서 리눅스 머신간 컴파일을 할때 정적 라이브러리와 동적 라이브러리는 VS2022에서 어떻게 설정해야 하는지 정리하여 남기려고 합니다.

 

 

 

 

반응형

 

VS2022에 라이브러리 링킹하기 (공통)
라이브러리의 헤더 경로 추가

 

정적 라이브러리 또는 동적 라이브러리에서 제공되는 함수를 사용하기 위해 우리는 헤더 파일을 코드에서 include 하여 사용하게 됩니다.

이때 헤더 파일이 어디에 있는지 개발툴에게 알려주어야 합니다.

헤더 파일의 경로를 기재합니다. 단, 리눅스 머신에서의 위치입니다.

라이브러리의 헤더 경로는 상대 경로, 절대 경로 모두 사용 가능합니다.

단, 상대 경로인 경우 내가 개발중인 실행 파일이 기준이므로 이를 잘 확인 해보셔야 합니다.

 

VS2022에 라이브러리 링킹하기 (공통)
라이브러리의 이름 추가

 

리눅스 머신에서 라이브러리는 lib로 시작되고 .a 또는 .so 로 끝나게 됩니다.

따라서 내가 해당 라이브러리를 사용한다고 했을때, 라이브러리의 이름을 개발툴에게 알려주어야 합니다. 그래야 컴파일 시점에 라이브러리를 코드에서 참조하게 되거든요.

라이브러리의 이름을 기재합니다. 단, lib를 제외한 파일명 입니다.

만약 추가하려는 라이브러리가 libCommonLib.a 또는 so 라면 CommonLib 를 적어주시면 됩니다.

 

VS2022에 라이브러리 링킹하기 (정적 라이브러리)

 

위 두 가지는 정적 라이브러리, 동적 라이브러리의 공통 사항이었습니다.

이 부분은 정적 라이브러리. 즉, .a 파일을 링킹하는 방법입니다. (윈도우에서의 .lib)

 

우리는 헤더 파일의 경로만 개발툴에게 알려준 상태입니다. 따라서 라이브러리의 경로도 알려주어야 합니다.

사용할 라이브러리 경로 및 이름 기재

 

정적 라이브러리 사용을 위해 -L경로 -l이름 의 형태로 기재 해주어야 합니다. 여기서 경로는 절대 경로, 상대 경로 모두 사용 가능합니다.

rt 와 pthread 라는 라이브러리는 -L경로 가 기재되어 있지 않습니다.

그 이유는 리눅스 OS의 LD_LIBRARY_PATH 에 해당 라이브러리의 경로가 이미 기재되어 있기 때문입니다.

(윈도우의 환경 변수에 경로가 기재된 것과 같습니다.)

이렇게 기재된 라이브러리는 gcc 명령어로 본다면 -o 뒤에 붙게 됩니다. 즉, makefile에서 라이브러리를 추가시켜 주기 위한 명령어를 적어주는 곳이라고 보면 되겠습니다.

 

VS2022에 라이브러리 링킹하기 (동적 라이브러리)

 

이 부분은 동적라이브러리. 즉, .so 파일을 링킹하는 방법입니다. (윈도우에서의 .dll)

 

우리는 헤더 파일의 경로만 개발툴에게 알려준 상태입니다. 따라서 라이브러리의 경로도 알려주어야 합니다.

사용할 라이브러리 경로 및 이름 기재

동적 라이브러리의 경우, 라이브러리의 경로만 적어주면 됩니다.

정적 라이브러리와는 다르게 위 [공통] 에서 기재한 라이브러리의 이름을 그대로 사용합니다.

다만 해당 라이브러리들의 경로는 알 수 없으므로 이를 기재 해주는 개념이라고 생각하시면 되겠습니다.

마찬가지로 LD_LIBRARY_PATH에 기재된 라이브러리들 (rt, pthread 등) 은 이곳에 경로를 기재해도 되고, 하지 않아도 됩니다.

728x90
반응형
Comments