Как использовать файлы .lib, .dll и .exp в VC++?

Я пытаюсь решить линейные системы уравнений с помощью pardiso. Я скачал с сайта все, что мне может понадобиться (три файла: .lib, .dll и .exp).

Я знаю, что такое dll и lib, и ничего не знаю о .exp. Более того, я ищу в Интернете и узнаю, что мне нужен заголовочный файл. Но pardiso не предоставляет мне файл .h.

Более того, pardiso предоставляет несколько примеров, среди которых я хочу использовать http://www.pardiso-project.org/manual/pardiso_unsym.cpp.

Теперь приходит моя проблема. Как использовать файлы .lib/.dll/.exp в VC++ 2015 без файла заголовка? Я знаю, что есть два способа загрузить файл .dll: динамически и статически, но понятия не имею, как это реализовать.

Может быть, моя проблема довольно проста, потому что я мало знаю о C/C++ и dll. Пожалуйста, помогите мне.

Большое спасибо!


person Alston    schedule 10.06.2016    source источник
comment
Просто посмотрите на пример кода веб-сайта. По какой-то очень странной причине вы должны сами объявлять прототипы функций в своем исходном файле. Всегда хорошо, когда менее чем за 5 минут можно сказать, что библиотека хлам и не стоит вашего времени.   -  person Hans Passant    schedule 10.06.2016
comment
Так вы говорите, что pardiso - хлам? Какой решатель я могу использовать тогда?   -  person Alston    schedule 11.06.2016


Ответы (2)


Сам я пакет не скачивал, но поверю вам на слово, что в нем нет заголовочных файлов (кажется таковым из примера, на который вы ссылаетесь).

Во-первых, не включать заголовочные файлы — это чрезвычайно странный способ распространения библиотеки.

Просматривая руководство Pardiso, кажется, что они действительно публикуют там интерфейсы функций. Итак, как вы могли бы использовать его, создайте файл заголовка самостоятельно, воссоздав прототипы функций на основе информации из этого PDF-файла. См., например, страницу 7 руководства, в которой перечислены два вызова функций:

/* Check license of the solver and initialize the solver */
pardisoinit(pt, &mtype, &solver, iparm, dparm, &error);

/* Solve matrix sytem */
pardiso(pt, &maxfct, &mnum, &mtype, &phase, &n, a, ia, ja,
        perm, &nrhs, iparm, &msglvl, b,  x, &error, dparm);

В предыдущем и следующем разделах этого PDF-файла приведены прототипы этих функций на Фортране, а их аргументы описаны в тексте. Из этой информации вам придется реконструировать прототип.

Альтернативным источником этих прототипов могут быть примеры, предоставленные Pardiso, которые, по-видимому, непосредственно содержат прототипы. Вам решать, будет ли их копирование и вставка допустимы с точки зрения лицензии.

Почему они делают это таким образом, я не понимаю, но похоже, что так оно и есть.

Чтобы ответить на вопрос о файле .exp: он в основном похож на файл .lib тем, что указывает, какие символы экспортируются из файла .dll. Его можно смело игнорировать в обычных ситуациях. Вам нужно будет использовать его, только если у вас есть два двоичных файла (DLL или exe), которые связаны друг с другом циклическим образом.

person Angew is no longer proud of SO    schedule 10.06.2016
comment
Из примеров, предоставленных pardiso, есть несколько прототипов функций, таких как extern "C" void pardisoinit (void *, int *, int *, int *, double *, int *); . Должен ли я извлечь их в новый файл .h? - person Alston; 10.06.2016
comment
@ Алстон Правда. Тогда вы можете просто скопировать и вставить их в созданный вами хадер. Развернул ответ. - person Angew is no longer proud of SO; 10.06.2016
comment
Большое спасибо. позвольте мне сделать это сейчас. :). - person Alston; 10.06.2016
comment
Привет Ангю, твой метод работает хорошо. И я узнаю, что даже без заголовочного файла пример работает. Причина в том, что я забыл добавить направление библиотеки в VC. Спасибо за ваш ответ! - person Alston; 11.06.2016
comment
Привет Angew, у меня есть новая проблема здесь. Мне нужна лицензия на использование Pardiso (файл pardiso.lic), и я не знаю, куда поместить этот файл. Как и в руководстве, This license file can be in the home directory of the user, or in the directory from which the user runs a program linked with the PARDISO library. Alternatively, this file can be placed in a fixed location and the environment variable PARDISO LIC PATH set to the path of its location. Должен ли я просто поместить файл .lic в корневой каталог моего проекта VC? - person Alston; 11.06.2016
comment
@Alston Там перечислены три места. Используйте один. Я бы выбрал фиксированное местоположение и PARDISO_LIC_PATH сам. - person Angew is no longer proud of SO; 14.06.2016
comment
Большое спасибо. Я преуспел! - person Alston; 14.06.2016

Просто свяжите .lib с вашим проектом VS и скопируйте .dll в папку .exe (или в папку проекта, если вы можете выполнять отладку с помощью Visual Studio), и вы сможете настроить проект БЕЗ файлов .h (только в определенном случае Pardiso).

person Jingyu Wang    schedule 27.07.2017