wnsgml972 / wnsgml972.github.io

Hi there :smile:
MIT License
5 stars 3 forks source link

C, C++ 외부 라이브러리(dll, lib) 사용하기 #64

Open utterances-bot opened 4 years ago

utterances-bot commented 4 years ago

C, C++ 외부 라이브러리(dll, lib) 사용하기

mosquitto나 ifcplusplused 같은 오픈소스를 Build 하기 위해 많은 노력을 했었는데 그 과정에서 얻게 된 지식을 공유하기 위해 작성하였습니다.

https://wnsgml972.github.io/setting/2018/11/01/dll_lib/

hantaejay-programing commented 4 years ago

안녕하세요.. 잘이해가 안되는 부분이 있어서 질문하는데요. dll에 들어가는것이 함수인지 아니면 dll프로잭트 코드인지 뭔지 모르겠습니다.. 그리고 왜 dll의 헤더파일을 알아야 되나요? 여러번 생각해보고 구글링해보다가 질문을 남길게요.. 정확히 알려주시면 감사하겠습니다!

wnsgml972 commented 4 years ago

@hantaejay-programing

질문해 주셔서 감사합니다. 저도 많이 부족하지만 제가 아는 부분에서 답변해드리겠습니다 :)

질문 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 여기에서 찾아보는 것이 훨씬 좋을 것 같습니다!

hantaejay-programing commented 4 years ago

오 감사합니다 많은 도움이 되었습니다. ㅎㅎ 다른곳에서는 대충대충 알려주시는데 여기선 제대로 알려주시네요.. 정말감사하고 존경합니다!

iamhyunsoo commented 4 years ago

설명 감사드립니다.

https://github.com/binance-exchange/binacpp 제가 바이낸스 API를 비주얼스튜디오에 링크 하려구 하는데요 추가종속성 파트에서 .lib 파일들을 등록해줘야 하는데 바이낸스 API에는 리눅스 .o(오브젝트파일), .so, .a 파일들이 있습니다.

어떻게 해야지 윈도우 비주얼스튜디오에 저 추가종속성 파일들을 연결 할 수 있을까요?

wnsgml972 commented 4 years ago

@kylehslee

질문해 주셔서 감사합니다. 질문하신 내용에 대해 잘 정리된 게시글이 있어 공유드립니다.

https://www.sysnet.pe.kr/2/0/11844

글에서와 같이 .so와 같은 동적 라이브러리 파일을 제가 본 게시글에 적어놓은 방식인 추가 종속성에 추가하면 된다고 합니다!

iamhyunsoo commented 4 years ago

@wnsgml972 감사합니다