c++ - 如何在VC++中使用.lib、.dll和.exp文件?

标签 c++ visual-c++ dll pardiso

我正在尝试使用 pardiso 求解线性方程组。我已经从网站下载了我可能需要的所有内容(三个文件:.lib、.dll 和 .exp 文件)。

我知道什么是 dll 和 lib,但对 .exp 一无所知。此外,我在互联网上搜索发现我需要一个头文件。但是 pardiso 没有为我提供 .h 文件。

此外,pardiso提供了一些示例,其中我想使用 http://www.pardiso-project.org/manual/pardiso_unsym.cpp .

现在我的问题来了。如何在 VC++ 2015 中使用没有头文件的 .lib/.dll/.exp 文件?我知道有两种方法加载.dll文件:动态和静态,但不知道如何实现。

也许我的问题很简单,因为我对C/C++和dll了解不多。所以请帮助我。

非常感谢!

最佳答案

我自己没有下载该软件包,但我相信您的话,其中没有头文件(从您链接到的示例来看似乎是这样)。

首先,不包含头文件是一种极其奇怪的分发库的方式。

浏览 Pardiso manual ,看起来他们实际上在那里发布了函​​数接口(interface)。因此,您将如何使用它,通过根据该 PDF 中的信息重新创建函数原型(prototype)来自己创建头文件。例如,请参阅手册第 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 的前面和后面的部分中,给出了这些函数的 Fortran 原型(prototype),并以文本形式描述了它们的参数。根据这些信息,您必须重建原型(prototype)。

这些原型(prototype)的另一个来源是 Pardiso 提供的示例,它显然直接包含原型(prototype)。由您来验证复制粘贴它们是否可以许可。

我无法理解他们为什么要这样做,但看起来他们确实如此。

回答 .exp 文件问题:它基本上与 .lib 文件类似,因为它指定从 .dll 导出哪些符号.在正常情况下可以安全地忽略它。仅当您有两个以循环方式相互链接的二进制文件(DLL 或 exe)时,才需要使用其中一个。

关于c++ - 如何在VC++中使用.lib、.dll和.exp文件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37746687/

相关文章:

c++ - QT类之间的连接

c++ - Sfinae 模板化隐式转换运算符重载

c++ - 缺少 DLL 问题

windows - 针对 Mac/Unix 开发人员的 MS Windows 编程建议

c - 如何用C写一个DLL文件?

c++ - QNetworkAccessManager 多次上传失败

c++ - 派生类模板看不到基类的成员

c++ - 试图理解 C++ 中的线程

C++:dll 不适用于 Visual Studio 2017,但适用于 g++

java - 可以在Windows上的loadLibrary()的java进程中修改 "path"吗?