Как настроить библиотеку NTL в Visual Studio 2017
Я только что установил Visual Studio 2017 и хочу использовать библиотеку NTL. Я следовал за шагами, описанными здесь (для VS2013). Компиляция библиотеки NTL в Visual Studio 2013
Как и ожидалось, он компилируется (с несколькими, я надеюсь, незначительными предупреждениями).
Затем, по тому же решению, я делаю эти последовательные шаги: (по тому же решению)
- Добавить проект -> Новый проект -> Visual C++ -> Win32 Console Appl.
- Щелкните правой кнопкой мыши по созданному проекту -> Сделать стартовым проектом
- Щелкните правой кнопкой мыши по созданному проекту -> Добавить -> Справка -> NTL
- Щелкните правой кнопкой мыши по созданному проекту -> Свойства конфигурации -> C/C++ -> Общие -> Дополнительные каталоги включения -> (включает NTL)
- Возьмите / скопируйте какой-нибудь файл из папки "tests" (скачанный из репозитория NTL)
- Удалите все ниже #include "stdafx.h"
- Вставить и построить
Эти шаги должны работать на 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. Я не знаю. Все, что я знаю, это то, что он написан кем-то намного умнее меня, а жизнь слишком коротка; Я сделал свои изменения, и я иду дальше.