Как настроить библиотеку NTL в Visual Studio 2017

Я только что установил Visual Studio 2017 и хочу использовать библиотеку NTL. Я следовал за шагами, описанными здесь (для VS2013). Компиляция библиотеки NTL в Visual Studio 2013

Как и ожидалось, он компилируется (с несколькими, я надеюсь, незначительными предупреждениями).

Затем, по тому же решению, я делаю эти последовательные шаги: (по тому же решению)

  1. Добавить проект -> Новый проект -> Visual C++ -> Win32 Console Appl.
  2. Щелкните правой кнопкой мыши по созданному проекту -> Сделать стартовым проектом
  3. Щелкните правой кнопкой мыши по созданному проекту -> Добавить -> Справка -> NTL
  4. Щелкните правой кнопкой мыши по созданному проекту -> Свойства конфигурации -> C/C++ -> Общие -> Дополнительные каталоги включения -> (включает NTL)
  5. Возьмите / скопируйте какой-нибудь файл из папки "tests" (скачанный из репозитория NTL)
  6. Удалите все ниже #include "stdafx.h"
  7. Вставить и построить

Эти шаги должны работать на VS2013 и VS2015, к сожалению, при сборке я получил 4 ошибки, связанные с компоновщиком (LNK2019).

Все они похожи на пример ниже:

Ошибка LNK2019: неразрешенный внешний символ "void __cdecl NTL::MatPrime_crt_helper_deleter(класс NTL::MatPrime_crt_helper *)" (?MatPrime_crt_helper_deleter_policy::deleter(класс NTL:: MatPrime_crt_helper *) "(? Deleter@MatPrime_crt_helper_deleter_policy@ZZ_pInfoT@NTL@@SAXPAVMatPrime_crt_helper@ NTL_T_LT @ ZLT_LT @ ZLT_LTT)

Можете ли вы посоветовать, как поступить?

Я попытался построить этот пример -> ZZ_pEXTest.cpp

Заранее спасибо!

1 ответ

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

Однако типы в объявлениях являются классами, а типы в реализации являются структурами. Поэтому подпись функции не совпадает, и компоновщик не может найти реализацию.

Итак, я просто обновил предварительные объявления типов параметров, чтобы они стали такими, какими они должны быть: struct.

В lip.h, поменяй _ntl_general_rem_one_struct быть struct, В ZZ_p.h изменить MatPrime_crt_helper быть struct,

Я верю, что это все, что я сделал.

Вы не должны действительно вносить изменения в код. Там может быть переключатель компилятора, или он не работает только в VS. Я не знаю. Все, что я знаю, это то, что он написан кем-то намного умнее меня, а жизнь слишком коротка; Я сделал свои изменения, и я иду дальше.

Другие вопросы по тегам