2011-02-25 1 views
1

IIS/ISAPI 어플리케이션으로 사용하기 위해 DLL을 만들고 싶습니다. 여태까지는 그런대로 잘됐다. 그것은 작동합니다. 그러나, 나는 (일부 부스트 라이브러리처럼) 런타임 dll과 다른 의존성을 arround로 드래그해야한다.정적 라이브러리로 DLL 빌드하기

하나의 DLL을 만들고 싶습니다 (여러 서버에서의 배포를 쉽게하기 위해).

그래서 스위치를/MD에서/MT로 변경했습니다. 그러나, 지금 나는 연결 도중 중복 상징의 과실을 얻는다. 예를 들면 다음과 같습니다.

msvcprtd.lib(MSVCP100D.dll) : error LNK2005: "public: void __thiscall std::basic_ostream<char,struct std::char_traits<char> >::`vbase destructor'(void)" ([email protected][email protected]@[email protected]@@[email protected]@QAEXXZ) already defined in gateway.obj 

/MD 또는/MT는 컴파일러 플래그이고 링커 플래그는 아닙니다. 그리고 그것은 왜 어떤 이유로 중복 심볼을 얻는지를 설명 할 수 있습니다 (각 .obj에 포함될 것입니다).

그래서 질문 : 모든 종속성을 포함하는 DLL을 얻으려면 Visual Studio 10을 어떻게 구성해야합니까?

답변

1

/MD/MT 스위치는 타사 라이브러리가 아닌 Microsoft C 런타임 라이브러리에만 적용됩니다. This documentation은 컴파일러 스위치 인 이유에 대한 정보를 제공합니다 (컴파일 중에 다른 정의가 만들어 짐).

타사 DLL을 정적 라이브러리로 직접 가져 오는 것은 정적 라이브러리가 이미 존재하지 않는 한 간단한 프로세스가 아닙니다. 정적 라이브러리로 DLL을 돌리는 표준 방법에 대해서는 잘 모릅니다. 빠른 인터넷 검색은 해당 프로세스를 수행한다고 주장하는 도구가 있음을 나타냅니다 (빠른 검색은 무료 정보를 표시하지 않습니다). 하지만 가장 강력한 솔루션은 기존 정적 라이브러리를 사용하는 것입니다. Bools 라이브러리의 정적 버전을 빌드 할 수 있다고 생각합니다. 그러면 Visual Studio에서 DLL에 대한 라이브러리의 이름을 지정하는 대신 링크 문에서 지정할 수 있습니다.

+0

고맙습니다 ... 런타임에만 적용되는이 litte 정보는 더 쉬운 방법입니다. –