Компиляция и использование библиотеки NTL C++ для Windows

StackOverflow https://stackoverflow.com/questions/2621136

  •  26-09-2019
  •  | 
  •  

Вопрос

Я скомпилировал библиотеку целочисленной арифметики точности NTL inifite для 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 это работает нормально.Теперь в 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() для векторного типа?

Помощь очень ценится!

Это было полезно?

Решение

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

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

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

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

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

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top