2010-12-27 3 views
1

Qt 라이브러리를 정적으로 연결하려고합니다. Windows에서 MSVC를 사용하여 Botan을 구축 중이며 다음 오류가 발생합니다.MSVC를 사용하여 Windows의 Botan에 정적으로 링크 할 때의 문제

..\..\3rdparty\temp\botan-msvc\build\include\botan/secmem.h(129) : error C2589: '(' : illegal token on right side of '::' 
     ..\..\3rdparty\temp\botan-msvc\build\include\botan/secmem.h(128) : while compiling class template member function 'void Botan::MemoryRegion<T>::copy(const T [],size_t)' 
     with 
     [ 
      T=Botan::byte 
     ] 
     ..\..\3rdparty\temp\botan-msvc\build\include\botan/buf_comp.h(41) : see reference to class template instantiation 'Botan::MemoryRegion<T>' being compiled 
     with 
     [ 
      T=Botan::byte 
     ] 
..\..\3rdparty\temp\botan-msvc\build\include\botan/secmem.h(129) : error C2059: syntax error : '::' 

이것은 MinGW에서는 발생하지 않습니다. 그것은 또한 모든 Botan 관련 코드를 주석 처리 할 때 발생합니다. 이것이 의미하는 바는 무엇이며 어떻게 해결할 수 있습니까? 또한 MinGW에서 발생하지 않는 이유는 무엇입니까?

+0

오류 메시지에서 알기 힘든, 잘못된 것을보기 위해 Botan 헤더를 읽어야합니다. gcc 용으로 작성된 코드는 특히 템플릿을 사용할 때 MSVC를 사용하여 빌드해야하는 경우가 종종 있습니다. –

+1

포함하고있는 Windows 헤더가 최소 및 최대 매크로를 정의하지 않는지 확인하십시오. 전처리기를 통해 코드를 실행하면 std :: min이'std :: (x)와 같은 것으로 다시 작성되는 것을 볼 수 있습니다. <(y)? (x) : (y))'로 표시되는 오류 메시지와 일치합니다. –

답변

2

잭 로이드 (Jack Lloyd)의 의견을 통해 문제를 파악할 수있었습니다. 분명히 한 경로 또는 다른 #define "min"을 통해 포함 된 것입니다. 방금 정의하지 않았고 라이브러리가 완벽하게 링크되어 있습니다. 고마워요!