Компиляция и использование библиотеки NTL C++ для Windows
Я скомпилировал целочисленную арифметическую библиотеку NTL с постоянной точностью для C++, используя Microsoft Visual Studio 2008. Я сделал, как объяснено, на этом сайте, используя интерфейс Visual Studio, а не из командной строки. На самом деле я бы предпочел сделать это из командной строки, но я не был уверен, как это сделать.
Во всяком случае, я получил библиотеку, и теперь я хочу скомпилировать программу из библиотеки из командной строки. Программа, которую я пытаюсь скомпилировать, была протестирована в системе Linux, где я компилирую ее с помощью следующего
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, у меня его нет в Windows. Это чисто дополнительная вещь, которая заставит NTL работать быстрее. Во всяком случае, это нормально работает на Linux. Сейчас на винде пишу следующее
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() для векторного типа?
Помощь очень ценится!
1 ответ
mpqs.h определенно включен, так как вывод просит вас сослаться на него.
Видя, что MPQS.h не включен в библиотеку NTL... вы написали это? Если да, можете ли вы опубликовать код?
Кроме того, не должны ли вы включить файл библиотеки где-нибудь в вашей сборке?
Изменить: нет функции find_smooth_values, так почему вы должны ожидать, что MSVC найдет его? Я не уверен, почему это компилируется в GCC, но его явно не хватает. Я предполагаю, что другие ошибки вызваны из-за этой. Ошибки говорят вам вещи. Вы должны слушать их.
push_back терпит неудачу, потому что он не знает, к какому типу вы пытаетесь вставить push_back. Это снова, вероятно, вызвано тем, что find_smooth_values не существует. Попробуйте добавить прототип функции в класс QS. Это вполне может исправить все ваши проблемы.
Что касается библиотеки, она не будет использовать библиотеку, пока компиляция не будет успешной. Так что не беспокойся об этом прямо сейчас. Зайдите и исправьте ошибки, о которых сообщает MSVC!