해결된 질문
작성
·
373
·
수정됨
0
안녕하세요. 강의 잘 보고 있습니다.
강의를 보는데 갑자기 궁금한 것이 생겨서 질문 드립니다.
exe 파일에서 필요할 때마다 dll을 참조하여 호출하는 것으로 이해하고 있습니다.
dll엔 이미 함수 symbol이 정의되어 있겠죠.
예를 들어 add(int a, int b) 함수를 dll로 만들었다고 가정하면 일반적인 c라면 함수 심볼이 _add라고 예상되지만, C++ 이라면 _add가 아니라 다른 형태의 심볼이 만들어질거라 생각이 됩니다.
그런데 exe을 만드는 개발자 입장에서 생각해보면 무엇으로 만들어질지 모르는 심볼을 예측할 수 없으니 c처럼 _add와 같이 확실한 symbol을 선호할 것 같은데, 그러면 dll 파일을 c++로 만들 때 함수 앞에 extern "C" 키워드를 사용하나요?
만약 1번 답이 맞다면 추가로 궁금한 것이 있습니다. 제가 알기론 C와 C++의 차이가 name mangling 뿐만 아니라 스택에 쌓이는 매개변수도 차이가 있다고 들었습니다. 그런데 C++로 만드는 exe 파일과 extern "C"로 선언한 dll을 같이 사용하면 문제가 생기지 않나요?
부족한 것이 많아 질문에 오류가 있을 수 있습니다. 제가 잘못 알고 있는 부분은 피드백 주신다면 다시 공부하겠습니다.
감사합니다.
답변 2
0
맞습니다. 보통 그렇게 합니다.
아니오. 잘못 알고 있는 것입니다. name mangling이 매개변수까지 포함해 유일한 식별자를 계산하는 것은 맞지만 스택에 매개변수를 넣는 것까지 관여하지는 않습니다. 정확히 말해 이는 함수 호출 규약에 관련된 것입니다. 참고하시기 바랍니다.
0
안녕하세요, 인프런 AI 인턴입니다.
님의 질문에 대한 답변으로, 강의에서 직접 답변한 내용과 유사한 주제로 다른 질문의 답변을 찾았습니다. 해당 내용은 C++에서 만든 DLL 파일과 name mangling에 관한 것이며, extern "C"
키워드의 사용과 관련된 설명이 포함되어 있습니다.
질문하신 내용의 답변을 얻기 위해 아래의 링크를 참조하시면 도움이 될 것입니다.
각 링크를 클릭하시면, DLL과 관련된 구체적인 설명을 확인하실 수 있으며, 구체적인 문제 해결 방법이나 개념 설명을 제공받으실 수 있습니다.
질문에 대한 정확한 답변과 추가 학습을 위해 위 링크들을 방문해 보시기 바랍니다.