Компиляция и использование библиотеки NTL c ++ для Windows - PullRequest
0 голосов
/ 12 апреля 2010

Я скомпилировал целочисленную арифметическую библиотеку 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 Ответ

0 голосов
/ 12 апреля 2010

mpqs.h определенно включен, так как вывод просит вас сослаться на него.

Видимо, что MPQS.h не включен в библиотеку NTL ... вы это написали? Если да, можете ли вы опубликовать код?

Кроме того, разве вы не должны включать файл библиотеки где-нибудь в вашей сборке?

Edit: нет функции find_smooth_values, так почему вы должны ожидать, что MSVC найдет ее? Я не уверен, почему это компилируется в GCC, но его явно не хватает. Я предполагаю, что другие ошибки вызваны из-за этой. Ошибки говорят вам вещи. Вы должны их слушать.

push_back терпит неудачу, потому что он не знает, к какому типу вы пытаетесь вставить push_back. Это снова, вероятно, вызвано тем, что find_smooth_values ​​не существует. Попробуйте добавить прототип функции в класс QS. Это вполне может решить все ваши проблемы.

Что касается библиотеки, она не будет использовать библиотеку, пока компиляция не будет успешной. Так что не беспокойся об этом прямо сейчас. Зайдите и исправьте ошибки, о которых сообщает MSVC!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...