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

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

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

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

  1. Добавить проект -> Новый проект -> Visual C++ -> Консольное приложение Win32.
  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(class NTL::MatPrime_crt_helper *)" (?MatPrime_crt_helper_deleter@NTL@@YAXPAVMatPrime_crt_helper@1@@Z), на который ссылается функция "public: static void __cdecl NTL::ZZ:_ MatPrime_crt_helper_deleter_policy::deleter(class NTL::MatPrime_crt_helper *)" (?deleter@MatPrime_crt_helper_deleter_policy@ZZ_pInfoT@NTL@@SAXPAVMatPrime_crt_helper@3@@Z) NTLtest ‹thePathToTheLib> (ZZ_1p.obj)

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

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

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


person mir0soft    schedule 22.06.2017    source источник
comment
Я тоже только что столкнулся с этой проблемой, но в VS2015. Вы нашли решение?   -  person Adrian Brown    schedule 12.07.2017


Ответы (1)


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

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

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

В lip.h измените _ntl_general_rem_one_struct на struct. В ZZ_p.h измените MatPrime_crt_helper на struct.

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

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

person Adrian Brown    schedule 12.07.2017