C, C++ 외부 라이브러리(dll, lib) 사용하기
utterances-bot opened this issue · comments
C, C++ 외부 라이브러리(dll, lib) 사용하기
mosquitto나 ifcplusplused 같은 오픈소스를 Build 하기 위해 많은 노력을 했었는데 그 과정에서 얻게 된 지식을 공유하기 위해 작성하였습니다.
안녕하세요.. 잘이해가 안되는 부분이 있어서 질문하는데요.
dll에 들어가는것이 함수인지 아니면 dll프로잭트 코드인지 뭔지 모르겠습니다..
그리고 왜 dll의 헤더파일을 알아야 되나요?
여러번 생각해보고 구글링해보다가 질문을 남길게요.. 정확히 알려주시면 감사하겠습니다!
질문해 주셔서 감사합니다.
저도 많이 부족하지만 제가 아는 부분에서 답변해드리겠습니다 :)
질문 1. dll에 들어가는 것이 함수인지 아니면 dll 프로젝트 코드인지 뭔지 모르겠습니다.
함수와 프로젝트 코드는 서로 (함수 <= 프로젝트 코드) 관계이기 때문에 제가 대답해드리기 어려울 것 같습니다.
어려우신 부분을 유추하여 말해보면, 간단하게 dll에는 프로그램 실행에 필요한 모든 정보들이 들어가 있다고 이해하시면 될 것 같습니다.
질문 2. 왜 dll의 헤더 파일을 알아야 되나요?
위 본문의 dll > 내 소스에 적용하기
부분에서 컴파일할 때 필요한 정보와, 해당 프로그램을 실행할 때 필요한 정보가 나누어져 있다고 나와있습니다.
질문에 대한 정답만 먼저 말하자면 해당 dll 프로젝트를 개발에 사용하기 위해 필요합니다.
특정 dll 프로젝트를 다운로드한 후, 자신의 프로젝트에 적용하여 컴파일할 때는 해당 오픈소스. h
를 Include 한 후 컴파일해야 하므로 헤더 파일이 필요합니다. (또한 해당 헤더파일을 include 한 뒤, 소스까지 적용하여 개발하려 하면, 해당 헤더파일의 실 구현인 lib 파일 또한 필요합니다. 여기서의 lib은 위의 정적라이브러리가 아님을 주의합니다.)
해당 dll 프로그램을 사용하여 나의 프로그램을 컴파일하려는 것인지, 성공적으로 컴파일이 끝난 후 생성된 결과물인 exe 파일과 dll 정보들을 통해 프로그램을 실행하려는 것인지 구분하면 좋을 것 같습니다.
여기까지 이해되셨다면 왜 정적라이브러리가(lib) 있고, 동적라이브러리가(dll) 있지? 헷갈리실 수 있습니다. (위 본문의 첫 번째 내용)
한가지 예를 들어 설명하면 만약 내가 API 프로젝트를 만드려 하는데 dll의 장점이 필요하지 않다면, 내가 만드려는 결과물을 정적라이브러리(lib)로 만들면 되는 것이고(exe 파일의 크기가 커지며, 효과적인 프로세스 메모리 관리가 안 될 수 있음), 그게 아니면 dll의 장점을 모두 활용할 수 있는 동적라이브러리(dll)로 만들면 됩니다.
해당 2가지 또한 구분하여 이해하는 것이 중요합니다.
본문은 오픈 소스로 되어있는 여러 프로젝트를 내 프로그램에 적용하여 개발하는 것을 도우는 것 이 주 목적이었기 때문에 dll의 정확한 장점이나, 프로그램을 실행하며 링킹되는 방법은 자세히 적지 않았습니다. 해당 내용은 https://support.microsoft.com/ko-kr/help/815065/what-is-a-dll 여기에서 찾아보는 것이 훨씬 좋을 것 같습니다!
오 감사합니다 많은 도움이 되었습니다. ㅎㅎ
다른곳에서는 대충대충 알려주시는데 여기선 제대로 알려주시네요..
정말감사하고 존경합니다!
설명 감사드립니다.
https://github.com/binance-exchange/binacpp
제가 바이낸스 API를 비주얼스튜디오에 링크 하려구 하는데요
추가종속성 파트에서 .lib 파일들을 등록해줘야 하는데
바이낸스 API에는 리눅스 .o(오브젝트파일), .so, .a 파일들이 있습니다.
어떻게 해야지 윈도우 비주얼스튜디오에 저 추가종속성 파일들을 연결 할 수 있을까요?
@kylehslee
질문해 주셔서 감사합니다.
질문하신 내용에 대해 잘 정리된 게시글이 있어 공유드립니다.
https://www.sysnet.pe.kr/2/0/11844
글에서와 같이 .so
와 같은 동적 라이브러리 파일을 제가 본 게시글에 적어놓은 방식인 추가 종속성에 추가하면 된다고 합니다!
@wnsgml972
감사합니다