dll 파일 링킹에 대하여
글쓴이: yhlee6138 / 작성시간: 화, 2022/08/09 - 3:13오후
안녕하세요. C/C++ 프로그래밍을 하고 있는 초보입니다.
평소 자료 찾으러 가끔 방문하였는데 이렇게 질문을 드리네요.
혹시 윈도우 프로그래밍을 하게 될 기회가 있어 dll 파일을 만들어 보려고 하여 Visual Studio에서 작업하여 만든 dll 파일은 vscode 환경에서 실행해 보려고 하였습니다.(vscode가 리눅스,윈도우 다 지원하여서 vscode로 개발을 해보려고 합니다.)
mingw64 + vscode 환경에서 dll 파일을 적용해 보려고 하는데 task.json 형식을 바꿔 쓰는 것이 익숙하지 않아 g++ 명령어를 통해 컴파일을 합니다.
g++ -o run run.cpp MakeDll.dll
g++ -o run run.cpp -L MakeDLL.dll
등 실행을 해보았는데 undefined reference to '__imp_*'에러가 발생합니다.
dll 생성할 때 __declspec(dllexport) dll 사용할 때 __declspec(dllexport) 사용을 다 하였는데 함수를 인식하지 못하는게 의아하여 글을 남김니다.
Forums:
mingw에서 MSVC dll을 쓰는 건 널리 알려진
mingw에서 MSVC dll을 쓰는 건 널리 알려진 이슈인가 보네요.
https://stackoverflow.com/questions/2472924/linking-to-msvc-dll-from-mingw
안녕하세요.
감사합니다. 해당 글을 읽어보았습니다.
혹시 그렇다면 mingw + vscode 조합이 아닌 gcc + vscode에서 gcc 컴파일러를 통해 만든 dll을 사용하면 괜찮을까요? gcc 컴파일러를 통해서 dll 파일을 만들어 보지는 않아 시도해 보아야 할 것 같습니다.
지식의 깊이가 없어 고민 없이 한 질문인 것처럼 보일 수 있어 이 점 양해 부탁드립니다.
잘 읽어 보지는 않았지만 LIB를 만들어서 쓰면
잘 읽어 보지는 않았지만 LIB를 만들어서 쓰면 된다는 것 같네요. gcc에서 dll을 만들수 있나요???
vscode는 텍스트 에디터입니다. vscode 대신
vscode는 텍스트 에디터입니다. vscode 대신 editplus나 심지어 메모장 써도 됩니다. 문법 맞는다면요.
mingw로 만드는 프로그램에서 다른 DLL 쓰고싶다면 코드에서 불러들이면 됩니다.
LoadLibrary(), GetProcAddress(), FreeLibrary() API 알아보세요.
(lib 필요없음. dll이 제공하는 함수형을 알아내서 헤더파일에 프로토타입 적어주는걸로 충분)
DLL 만드는거라면
https://www.transmissionzero.co.uk/computing/building-dlls-with-mingw/
컴파일할때 옵션 들어가는것이 달라지지 코드는 visual studio와 별 차이 없어보이네요.
Written By the Black Knight of Destruction
C++는 msvc와 gcc 가 네임맹글링 방식이
C++의 경우, msvc와 gcc 가 서로 네임맹글링 방식이 달라서 안된다고 보시면 됩니다.
C함수를 사용하시는 거라면, cpp 또는 헤더파일에서
가져올 함수에 대한 선언에서 extern "C" 가 누락된것 아닌지 확인해보세요.
댓글 달기