Microsoft MVP성태의 닷넷 이야기
오류 유형: 6. [VC++ 컴파일] already defined in ntdll.lib(ntdll.dll) [링크 복사], [링크+제목 복사],
조회: 31868
글쓴 사람
정성태 (techsharer at outlook.com)
홈페이지
첨부 파일
 

솔직히 이 현상을 재미있다고 표현해야 할지 모르겠지만.

최근에, 제가 "Windows 구조와 원리 그리고 Codes"라는 책을 읽고 있습니다.
거기 나온 예제를 컴파일 해보려고 했는데요.

참고로, 그 책의 소스는 아래 게시판에 "2번" 게시물로 등록되어져 있습니다.
http://cafe.naver.com/andyjung.cafe?iframe_url=/ArticleList.nhn%3Fclubid=11534822%26menuid=8%26boardtype=L%26page=

압축 파일을 풀면 "Windows_Codes" 폴더 밑으로, "ListHandles"라는 폴더가 보입니다.
제가 컴파일한 예제는 그 프로젝트입니다.

그 프로젝트를 컴파일하려면 ntdll.lib 파일이 필요한데, 이 파일은 SDK에는 포함되어 있지 않은 것으로, NT DDK를 다운로드/설치해야만 합니다. (DDK는 MSDN Subscriber에 가입된 경우에만 다운로드가 가능합니다.) 설치 후, lib 폴더를 VS.NET 2005의 "Options" 메뉴를 통해서 등록해 두어야 합니다.

어쨌든, 우여곡절 끝에 환경 구성을 한 다음.

제 컴파일 환경은 VS.NET 2005의 VC++ 8.0입니다. 그 예제는 dsw로 되어 있어서, 더블 클릭을 하게 되면 VS.NET 2005는 우선 프로젝트 변환을 하겠다고 합니다.

정상적으로 변환된 후, 컴파일을 시도하면 다음과 같은 오류가 발생합니다.

Linking...
LIBCMTD.lib(strtol.obj) : error LNK2005: _strtoul already defined in ntdll.lib(ntdll.dll)
.\Debug/ListHandles.exe : fatal error LNK1169: one or more multiply defined symbols found
Build log was saved at "file://d:\Snippet\BookCode\Windows_Codes\ListHandles\Debug\BuildLog.htm"
ListHandles - 2 error(s), 0 warning(s)
========== Build: 0 succeeded, 1 failed, 0 up-to-date, 0 skipped ==========

자, 이제 프로젝트 설정에서 "Use of MFC" 옵션을 기존의 "Use Standard Windows Libraries"에서 "Use MFC in a Shared DLL"로 바꿔주고 컴파일을 합니다.

프로젝트 설정

이번엔 다음과 같이 오류가 발생합니다.

------ Build started: Project: ListHandles, Configuration: Debug Win32 ------
Linking...
ListHandles.obj : error LNK2019: unresolved external symbol __imp__AdjustTokenPrivileges@24 referenced in function "int __cdecl EnablePrivilege(char const *)" (?EnablePrivilege@@YAHPBD@Z)
ListHandles.obj : error LNK2019: unresolved external symbol __imp__OpenProcessToken@12 referenced in function "int __cdecl EnablePrivilege(char const *)" (?EnablePrivilege@@YAHPBD@Z)
ListHandles.obj : error LNK2019: unresolved external symbol __imp__LookupPrivilegeValueA@12 referenced in function "int __cdecl EnablePrivilege(char const *)" (?EnablePrivilege@@YAHPBD@Z)
.\Debug/ListHandles.exe : fatal error LNK1120: 3 unresolved externals
Build log was saved at "file://d:\Snippet\BookCode\Windows_Codes\ListHandles\Debug\BuildLog.htm"
ListHandles - 4 error(s), 0 warning(s)
========== Build: 0 succeeded, 1 failed, 0 up-to-date, 0 skipped ==========

자... ^^; 이제 다시 "Use MFC in a Shared DLL" 옵션을 원래의 "Use Standard Windows Libraries"으로 돌려놓습니다. 참, 재미있게도... 이젠 정상적으로 프로젝트가 컴파일되어집니다. ^^






[최초 등록일: ]
[최종 수정일: 11/22/2022]

Creative Commons License
이 저작물은 크리에이티브 커먼즈 코리아 저작자표시-비영리-변경금지 2.0 대한민국 라이센스에 따라 이용하실 수 있습니다.
by SeongTae Jeong, mailto:techsharer at outlook.com

비밀번호

댓글 작성자
 




... 106  107  108  [109]  110  111  112  113  114  115  116  117  118  119  120  ...
NoWriterDateCnt.TitleFile(s)
11235정성태6/29/201721618Math: 20. Matlab/Octave로 Gram-Schmidt 정규 직교 집합 구하는 방법
11234정성태6/29/201719203오류 유형: 404. SharePoint 2013 설치 과정에서 "The username is invalid The account must be a valid domain account" 오류 발생
11233정성태6/28/201719065오류 유형: 403. SharePoint Server 2013을 Windows Server 2016에 설치할 때 .NET 4.5 설치 오류 발생
11232정성태6/28/201719923Windows: 144. Windows Server 2016에 Windows Identity Extensions을 설치하는 방법
11231정성태6/28/201719651디버깅 기술: 86. windbg의 mscordacwks DLL 로드 문제 - 세 번째 이야기 [1]
11230정성태6/28/201719122제니퍼 .NET: 26. 제니퍼 닷넷 적용 사례 (6) - 잦은 Recycle 문제
11229정성태6/27/201720591오류 유형: 402. Windows Server Backup 관리 콘솔이 없어진 경우
11228정성태6/26/201717775개발 환경 구성: 320. Visual Basic .NET 프로젝트에서 내장 Manifest 자원을 EXE 파일로부터 제거하는 방법파일 다운로드1
11227정성태6/19/201726345개발 환경 구성: 319. windbg에서 python 스크립트 실행하는 방법 - pykd [6]
11226정성태6/19/201717331오류 유형: 401. Microsoft Edge를 실행했는데 입력 반응이 없는 경우
11225정성태6/19/201716563오류 유형: 400. Outlook - The required file ExSec32.dll cannot be found in your path. Install Microsoft Outlook again.
11224정성태6/13/201719086.NET Framework: 661. Json.NET의 DeserializeObject 수행 시 속성 이름을 동적으로 바꾸는 방법파일 다운로드1
11223정성태6/12/201718089개발 환경 구성: 318. WCF Service Application과 WCFTestClient.exe
11222정성태6/10/201722106오류 유형: 399. WCF - A property with the name 'UriTemplateMatchResults' already exists.파일 다운로드1
11221정성태6/10/201719228오류 유형: 398. Fakes - Assembly 'Jennifer5.Fakes' with identity '[...].Fakes, [...]' uses '[...]' which has a higher version than referenced assembly '[...]' with identity '[...]'
11220정성태6/10/201724003.NET Framework: 660. Shallow Copy와 Deep Copy [1]파일 다운로드2
11219정성태6/7/201719107.NET Framework: 659. 닷넷 - TypeForwardedFrom / TypeForwardedTo 특성의 사용법
11218정성태6/1/201722032개발 환경 구성: 317. Hyper-V 내의 VM에서 다시 Hyper-V를 설치: Nested Virtualization
11217정성태6/1/201718139오류 유형: 397. initerrlog: Could not open error log file 'C:\...\MSSQL12.MSSQLSERVER\MSSQL\Log\ERRORLOG'
11216정성태6/1/201719841오류 유형: 396. Activation context generation failed
11215정성태6/1/201721658오류 유형: 395. 관리 콘솔을 실행하면 "This app has been blocked for your protection" 오류 발생 [1]
11214정성태6/1/201718904오류 유형: 394. MSDTC 서비스 시작 시 -1073737712(0xC0001010) 오류와 함께 종료되는 문제 [1]
11213정성태5/26/201724357오류 유형: 393. TFS - The underlying connection was closed: Could not establish trust relationship for the SSL/TLS secure channel.
11212정성태5/26/201723704오류 유형: 392. Windows Server 2016에 KB4019472 업데이트가 실패하는 경우
11211정성태5/26/201722447오류 유형: 391. BeginInvoke에 전달한 람다 함수에 CS1660 에러가 발생하는 경우
11210정성태5/25/201722783기타: 65. ActiveX 없는 전자 메일에 사용된 "개인정보 보호를 위해 암호화된 보안메일"의 암호화 방법
... 106  107  108  [109]  110  111  112  113  114  115  116  117  118  119  120  ...