dll 파일 링킹에 대하여

lyh1004의 이미지

안녕하세요. 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) 사용을 다 하였는데 함수를 인식하지 못하는게 의아하여 글을 남김니다.

라스코니의 이미지

mingw에서 MSVC dll을 쓰는 건 널리 알려진 이슈인가 보네요.

https://stackoverflow.com/questions/2472924/linking-to-msvc-dll-from-mingw

lyh1004의 이미지

감사합니다. 해당 글을 읽어보았습니다.
혹시 그렇다면 mingw + vscode 조합이 아닌 gcc + vscode에서 gcc 컴파일러를 통해 만든 dll을 사용하면 괜찮을까요? gcc 컴파일러를 통해서 dll 파일을 만들어 보지는 않아 시도해 보아야 할 것 같습니다.
지식의 깊이가 없어 고민 없이 한 질문인 것처럼 보일 수 있어 이 점 양해 부탁드립니다.

라스코니의 이미지

잘 읽어 보지는 않았지만 LIB를 만들어서 쓰면 된다는 것 같네요. gcc에서 dll을 만들수 있나요???

Necromancer의 이미지

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

Anti-Lock의 이미지

C++의 경우, msvc와 gcc 가 서로 네임맹글링 방식이 달라서 안된다고 보시면 됩니다.
C함수를 사용하시는 거라면, cpp 또는 헤더파일에서
가져올 함수에 대한 선언에서 extern "C" 가 누락된것 아닌지 확인해보세요.

댓글 달기

Filtered HTML

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

BBCode

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param>
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

Textile

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • You can use Textile markup to format text.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Markdown

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • Quick Tips:
    • Two or more spaces at a line's end = Line break
    • Double returns = Paragraph
    • *Single asterisks* or _single underscores_ = Emphasis
    • **Double** or __double__ = Strong
    • This is [a link](http://the.link.example.com "The optional title text")
    For complete details on the Markdown syntax, see the Markdown documentation and Markdown Extra documentation for tables, footnotes, and more.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Plain text

  • HTML 태그를 사용할 수 없습니다.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 줄과 단락은 자동으로 분리됩니다.
댓글 첨부 파일
이 댓글에 이미지나 파일을 업로드 합니다.
파일 크기는 8 MB보다 작아야 합니다.
허용할 파일 형식: txt pdf doc xls gif jpg jpeg mp3 png rar zip.
CAPTCHA
이것은 자동으로 스팸을 올리는 것을 막기 위해서 제공됩니다.