extern “C” error #2040: expected an identifier

gpc.c를 컴파일하다가 발생한 에러

[해법]

The extern "C" construct is a C++ specific thing, it can’t be used in C. And the compiler treats your source file as a C source file since it has the extension .c.

[참고문헌]

https://stackoverflow.com/questions/16192872/extern-c-error-2040-expected-an-identifier

https://shoon950.tistory.com/entry/함수-오버로딩-extern-C-cplusplus-매크로

https://dojang.io/mod/page/view.php?id=802

[교훈]

확장자 .c와 .cpp의 차이를 기억하자.

System.DllNotFoundException 에러 처리

[문제]

gpc64.dll을 이용한 프로그램을 다른 컴퓨터에서 실행했더니, 제목과 같은 에러 메시지가 발생했다.

실행시켰을 때의 에러 메시지
디버깅했을 때의 에러 메시지

[환경]

Windows 10 x64, Visual Studio 2019

[System.DllNotFoundExceoption 에러 원인]

원인1. 문제의 에러 메시지는 gpc64.dll 파일이 없기 때문에 표시된다.

-> 그런데 해당 폴더에 dll 파일이 존재할 때도 에러가 발생할 수 있다.

원인2. 이 때, 해당 dll(여기서는 gpc64.dll)이 의존하고 있는 dll이 없어도 똑같은 에러가 발생한다.

-> 해당 dll에 의존하는 모든 dll이 설치되지 않았기 때문에 이런 에러가 발생한다.

[해법]

depends.exe(Dependency Walker)를 이용해서 누락된 DLL을 확인할 줄 알았는데, 이를 계승한 새 프로그램(Download here)으로 확인하였다.

확인한 결과, 나의 경우 C++재배포가능패키지가 없었다. 그래서 다음 링크에서 재배포가능패키지를 설치한다.

Install Microsoft Visual C++ 2019 Redistributable Package on the user’s machine

https://support.microsoft.com/ko-kr/help/2977003/the-latest-supported-visual-c-downloads

[교훈]

DLL을 사용할 때, 의존성 여부도 확인해야 한다.

[참고 사이트]

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

https://stackoverflow.com/questions/14587775/system-dllnotfoundexception-unable-to-load-dll-no-errors-in-dev-machine-but-er