2013-04-30 2 views
1

Visual Studio 2010의 도구 체인을 사용하여 DLL을 생성하고 있습니다. 특히, 나는 Matlab 모듈을 원한다. 난 사실을 나는 생각하지만, 나는 다음과 같은 오류로 실행하고 있습니다 : 그것은 공유 라이브러리에 하나있을에 대한 이해가되지 않기 때문에DLL 연결시 명령 줄 오류

LIBCMT.lib(crt0.obj) : error LNK2019: unresolved external symbol _main referenced in function ___tmainCRTStartup 
.libs/AverageFilter.mexw32 : fatal error LNK1120: 1 unresolved externals 

내 DLL에서 이러한 기호가 없습니다. 그러나 'libcmt.lib'에는 실행 파일과 DLL에 대한 두 기호가 모두 포함됩니다. 따라서이 오류를 이해할 수 있지만 DLL을 명시 적으로 작성하고 있으므로 Microsoft의 링커가이 특정 확인되지 않은 기호를 무시할 것으로 예상했습니다.

DLL을 생성 할 때 정의되지 않은 기호가 없다는 것을 이해하지만 그러한 기호 만 부적절하므로 '/ FORCE'옵션을 사용하기로 결정했습니다. 정말이 솔루션을 싫어하지만, 먼저 Matlab 모듈을 작동시킨 다음 내 솔루션을 수정하고 싶습니다.

불행하게도, 다음과 같은 오류가있는 '/ FORCE'옵션의 결과를 사용하여 :

cl : Command line error D8021 : invalid numeric argument '/FORCE' 

어떻게 이러한 오류를 해결할 수 있습니까? Microsoft의 링커가 특정 미해결 심볼을 무시하도록하는 방법이 있습니까? 그들이 실행 코드가 포함 된 경우 창에서

+0

그렇게하는 이유에 대해 투표를하지 않으려면 의견을 남기십시오. 나는이 문제를 꽤 오랫동안 고치려고 노력해 왔으며 아무런 설명없이 투표를하는 사람을 빤다. – Daeden

답변

1

의 exe의 및 DLL의이 진입 점을 필요로 DllMain이 MSDN 페이지를 참조하십시오 :

는 콘솔 앱()의 주요 경향 exe를 들어 http://msdn.microsoft.com/en-us/library/windows/desktop/ms682583(v=vs.85).aspx

, 또는 순수 Win32 API 응용 프로그램 용 WinMain.

DLL이 main()을 원하기 때문에 EXE 콘솔 프로젝트를 만든 다음 나중에 DLL로 변경해야한다고 가정합니다.

문제를 해결하려면 일반적으로 DllMain 인 엔트리 포인트 기능을 만들어야하지만 실제로는 주 기능입니다. DLL의 엔트리 포인트는 아무 것도 할 수 없으므로 빈/스텁 함수가 링크를 허용하고 OS에 의해로드/언로드되므로 클라이언트가 코드를 호출 할 수 있습니다.

+0

답변 해 주셔서 감사합니다. Visual Studio IDE 만 사용하고 있으므로 콘솔 프로젝트 대 DLL 프로젝트에 대해 잘 모르겠습니다. 그 링크가 가장 유용함을 증명합니다! – Daeden

+0

스텁을 추가하면 모든 링크가 이루어져야하므로 일부 컴파일러 스위치를 통해 진입 점의 이름을 설정할 수 있습니다. – paulm

+0

나는 그것을 시도 할 것이다. 링커가 'dllMain'대신 '기본'기호에 대해 불평하고 있다는 사실은 이것이 공유 라이브러리 대신 실행 파일이라고 생각한다는 것을 의미합니까? – Daeden