2010-04-12 2 views
0

Microsoft Visual Studio 2008을 사용하여 C++ 용 NTL 무한 정밀도 산술 라이브러리를 컴파일했습니다. 명령 프롬프트가 아닌 Visual Studio 인터페이스를 사용하여 this site에 설명했습니다 . 실제로 나는 명령 프롬프트에서 그것을하는 것이 좋겠지 만, 나는 어떻게해야할지 확신이 없었다.Windows 용 NTL C++ 라이브러리 컴파일 및 사용

아무튼 나는 라이브러리를 컴파일하고 명령 프롬프트에서 라이브러리를 사용하여 프로그램을 컴파일하려고합니다. 내가 컴파일하려고이 프로그램은, 나는 다음과 같은

c++ -I/appl/htopopt/Linux_x86_64/NTL-5.4.2/include mpqs.cpp main.cpp -o main -L/appl/htopopt/Linux_x86_64/NTL-5.4.2/lib -lntl -L/appl/htopopt/Linux_x86_64/gmp-4.2.1/lib -lgmp -lm 

신경 끄시 GMP의 물건으로 컴파일 리눅스 시스템에서 테스트되었습니다, 그 윈도우에 설치 필요 없다. 이것은 NTL을 더 빠르게 실행할 수있는 선택 사항입니다. 어쨌든,이 리눅스에서 잘 작동합니다. 이제 Windows에서 나는 다음과 같은

cl /EHsc /I D:\Downloads\WinNTL-5_5_2\include mpqs.cpp main.cpp /link /LIBPATH:"D:\Documents\Visual Studio 2008\Projects\ntl\Debug" 

쓰기 그러나 이것은 다음과 같은 오류가 발생합니다

mpqs.cpp 
mpqs.cpp(38) : error C2039: 'find_smooth_vals' : is not a member of 'QS' 
     d:\desktop\qs\mpqs.h(12) : see declaration of 'QS' 
mpqs.cpp(41) : error C2065: 'M' : undeclared identifier 
mpqs.cpp(41) : error C2065: 'n' : undeclared identifier 
mpqs.cpp(42) : error C2065: 'sieve_table' : undeclared identifier 
mpqs.cpp(42) : error C2228: left of '.size' must have class/struct/union 
     type is ''unknown-type'' 
mpqs.cpp(43) : error C2065: 'sieve_table' : undeclared identifier 
mpqs.cpp(44) : error C2065: 'qx_table' : undeclared identifier 
mpqs.cpp(44) : error C3861: 'test_smoothness': identifier not found 
mpqs.cpp(45) : error C2065: 'smooth_indices' : undeclared identifier 
mpqs.cpp(45) : error C2228: left of '.push_back' must have class/struct/union 
     type is ''unknown-type'' 
main.cpp 
Generating Code... 

것처럼 그것은 내 mpqs.h 파일은 컴파일 과정에 포함되지 않습니다입니까? 또한 왜 벡터 형식에 대한 .push_back()에 대해 불평하는지 이해가 안되니?

도움을 많이 받으실 수 있습니다!

+0

NTL은 오래되었지만 대신 [MPIR] (http://mpir.org/)을 사용하십시오. – bobobobo

답변

0

mpqs.h는 확실히 출력에 포함되어 있으므로 참조하도록 요청합니다.

MPQS.h로 보이는 것은 NTL 라이브러리에 포함되어 있지 않은 것처럼 보입니다 ... 쓰셨습니까? 그렇다면 코드를 게시 할 수 있습니까?

또한 라이브러리 파일을 빌드의 어딘가에 포함시키지 않았습니까?

편집 : find_smooth_values ​​함수가 없으므로 MSVC에서 찾을 필요가있는 이유는 무엇입니까? GCC에서 왜 컴파일되는지 분명하지 않지만 분명히 빠져 있습니다. 나는이 때문에 다른 오류가 발생했다고 생각합니다. 오류가 당신에게 말하고 있습니다. 너는 그것들을 경청해야한다.

push_back에 넣으려는 유형이 무엇인지 알지 못하기 때문에 push_back이 실패합니다. 이것은 아마도 find_smooth_values가 존재하지 않기 때문에 발생했을 것입니다. 함수 프로토 타입을 QS 클래스에 추가하십시오. 이것은 모든 문제를 해결할 수 있습니다.

라이브러리의 경우 컴파일이 성공할 때까지 라이브러리를 사용하지 못합니다. 그러니 걱정하지 마세요. 들어가서 MSVC에서보고하는 오류를 수정하십시오!

+0

예, mpqs.h를 작성했으며 mpqs.cpp 및 main.cpp와 같은 디렉토리 폴더에 있습니다 이것은 mpqs 클래스를 사용하는 실행 가능한 파일입니다). 빌드 명령 끝에 "ntl.lib"를 추가하려고 시도했지만 동일한 오류가 발생했습니다. 내가 코멘트에 코드를 게시 할 수 있는지 모르겠지만 여기에 붙여 넣었습니다. http://pastebin.com/mLN5K40E –

+0

감사합니다!