如何在VC++中使用.lib、.dll和.exp文件
How to use .lib, .dll and .exp file in VC++?
我正试图用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手册,似乎他们实际上是在发布其中的功能接口。因此,使用它的方法是根据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的上一节和下一节中,给出了这些函数的Fortran原型,并在文本中描述了它们的参数。根据这些信息,您将不得不重建原型。
这些原型的另一个来源是Pardiso提供的例子,这些例子显然直接包含了原型。这取决于您来验证复制粘贴它们是否可以获得许可证。
我无法理解他们为什么这样做,但他们似乎是这样做的。
要回答.exp
文件问题:它与.lib
文件基本相似,因为它指定了从.dll
导出哪些符号。在正常情况下可以安全地忽略它。只有当您有两个二进制文件(DLL或exe)以循环方式相互链接时,才需要使用一个。
只需将.lib链接到VS项目,并将.dll复制到.exe位置(如果可以使用Visual Studio进行调试,则可以复制到项目位置),就可以设置不带.h文件的项目(仅在特定的Pardiso情况下)。
- 挂起和取消挂起一个文件DLL
- std::threads可以从Windows DLL中的全局变量创建/销毁吗?
- 导入库可以跨dll版本工作吗
- 从C++dll访问C#中的一行主要参数
- 链接到自行创建的dll失败
- 为什么使用 P/Invoke 调用 dll 时,某些计算机中的 LoadLibrary 失败?
- 在调用FreeLibrary后,释放动态链接到具有相同版本的CRT堆的DLL的内存
- 如何指定我希望我的LIB链接到的DLL文件?-Visual Studio 2019
- 如何将图像传输到c++(dll)中的缓冲区,然后在c#的缓冲区中读/写
- C++:将外部库链接到dll库
- 在 Windows 上,是否可以让 dll 在不使用 PATH 环境变量的情况下在另一个文件夹中查找依赖项?
- 不同的Visual Studio版本中缺少.dll
- 从DLL中删除类的实例
- 如何包装第三方DLL在R中使用
- 使用c#访问c++dll中带有char*参数的函数时发生AccessViolationException
- 系统.将数组移交给c#中动态加载的c++DLL时发生AccessViolationException
- 为什么导入Mixed native/CLR lib.dll的本机C++应用程序没有在Mixed lib.dll中的外部变
- 当我使用 C++ 中的 C# dll 来使用 Selenium 时,存在异常处理问题
- Python ctypes:不会按预期加载 dll
- 如何在VC++中使用.lib、.dll和.exp文件