2010-06-21 5 views
2

Visual Studio 2008에는 두 개의 프로젝트가 포함되어 있습니다. 한 프로젝트는 .dll이고 다른 프로젝트는 .dll을 호출하는 명령 줄 응용 프로그램입니다.Visual Studio 2008의 까다로운 연결 오류

파일 ("ast.c") 중 하나를 제거한 다음 곧 다시 추가하면 다음 오류가 발생합니다.

어떻게이 오류를 해결할 수 있습니까?

오류 22 오류 LNK2019 : 확인되지 않은 외부 기호 "__declspec (같이 DllImport) INT __cdecl ast_get_int_value (구조체 ast_node의 * 무효 *)"(__imp_ ast_get_int_value @@ YAHPAUast_node @@ PAX @ Z?) 함수에서 참조 "를 두 번 __cdecl 오른쪽에 있었다 - "(? d_low @@ YANPAUast_node @@ 000PAX @ Z)이 주요

답변

2

을 main.obj d_low (* 무효 구조체 ast_node의 *, 구조체 ast_node의 *, 구조체 ast_node의 *, 구조체 ast_node의 *은)는있어 프로젝트를 클릭하고 "링커"와 "입력"및 "추가 종속성"으로 이동하여 ".. \ $ (ConfigurationName) \ dll.lib"을 추가하십시오. "dll.lib"파일은 .dll에 대한 컴파일 프로세스의 일부로 만들어지며 외부 종속성을 해결할 수 있도록이 파일이있는 링커에게 알려야합니다. 이렇게하면 연결 오류가 한 번에 모두 해결되었습니다.

연결 과정 설명 http://www.codeproject.com/KB/DLL/XDllPt1.aspx의 일부 좋은 팁 :

  • DLL이 그 상징을 수출하고, 응용 프로그램이 DLL 기호를 수입합니다. 응용 프로그램을 컴파일 할 때 컴파일러는 포함 파일 (Test.h)을 통해 DLL 심볼을 보게됩니다. 응용 프로그램을 연결할 때 링커는 가져 오기 라이브러리 (Test.lib)를 통해 DLL 심볼을 보게됩니다.
  • DLL은 응용 프로그램을 실행할 때 EXE와 같은 디렉터리에 있어야합니다. 초기 버전의 Windows에서는 응용 프로그램 DLL을 Windows 또는 System 디렉터리에 두는 것이 허용되는 방식 이었지만 이제는 문제를 일으키는 것으로 인식되어서는 안됩니다.

그리고도 참조 :

http://support.microsoft.com/kb/815065

과 :

http://social.msdn.microsoft.com/Forums/en-US/vcgeneral/thread/a22571ad-ef89-4f94-afca-4f4d32cdd0f2