2009-12-24 1 views
2

VC++ 6을 사용하여 응용 프로그램을 개발 중입니다.초보자 : 라이브러리에서 사용하는 CRT 라이브러리를 결정하십시오.

타사 DLL이 있습니다. 이 라이브러리는 다중 스레드 DLL (/ MD) 및 내 응용 프로그램으로도 컴파일됩니다. 는하지만 링크 실패 : here에서

LINK : warning LNK4075: ignoring /EDITANDCONTINUE due to /INCREMENTAL:NO specification 
msvcprtd.lib(MSVCP60D.dll) : error LNK2005: "public: __thiscall std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> >::~basic_string<char,struct std::char_traits<char>,class std::allocator<char> >(void)" (??1?$basic_strin 
[email protected][email protected]@[email protected]@[email protected]@[email protected]@[email protected]@[email protected]) already defined in XXXApi.lib(CODbg.obj) 
msvcprtd.lib(MSVCP60D.dll) : error LNK2005: "public: __thiscall std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> >::basic_string<char,struct std::char_traits<char>,class std::allocator<char> >(class std::basic_string<c 
har,struct std::char_traits<char>,class std::allocator<char> > const &)" ([email protected][email protected]@[email protected]@[email protected]@[email protected]@[email protected]@[email protected]@@Z) already defined in XXXApi.lib(Dictionary.obj) 
../../Exes/win2k3_oracle11/XXX.exe : fatal error LNK1169: one or more multiply defined symbols found 
Error executing link.exe. 

나는 3 라이브러리와 내 코드를 모두 컴파일하더라도/MD는, 아마도 사용하는 신규/이전 iostream 베 이닝과 충돌이 있다고 참조하십시오.

제 3 자 라이브러리에서 iostream 라이브러리 old/new를 사용하는 방법을 결정할 수 있습니까?

UPD : 제 3 자 lib는 이전에 생각한 것처럼 정적이며 동적이지 않습니다. lib가/MD로 컴파일됩니다. 종속성 워커는 Libs가 아닌 wirh DLL을 사용합니다.

답변

2

이 도구를 모르는 경우 Walker가 종속됩니다. http://dependencywalker.com/

DLL 또는 exe를 기본 창에 끌어다 놓습니다. 모든 종속성이 표시됩니다.

타사 DLL에 연결하려는 경우 해당 DLL에 대해 .lib 만 있으면됩니다. .lib가 없으면 pelles 도구에서 lib.exe 또는 polib.exe를 사용하여 항상 만들 수 있습니다. .def 파일을 쓸 필요가 없으므로 polib를 사용하는 것이 더 쉽습니다. http://www.smorgasbordet.com/pellesc/

귀하의 질문에 도움이되기를 바랍니다.

편집 : 사용중인 .lib에 대한 소스 코드가 있습니까?