如何将静态库添加到 VS 2015 Fortran 项目?
Posted
技术标签:
【中文标题】如何将静态库添加到 VS 2015 Fortran 项目?【英文标题】:How to Add a Static Library to a VS 2015 Fortran Project? 【发布时间】:2018-04-03 23:04:59 【问题描述】:我已经在网上搜索过这个问题的答案,但我找到的解决方案(链接如下)似乎对我不起作用。
How to link a .LIB in a MS Visual Studio / Intel Fortran project? https://software.intel.com/en-us/forums/intel-visual-fortran-compiler-for-windows/topic/393843
我正在使用 VS 2015 和 Intel Fortran 2017。
我从我的 Utilities 项目创建了一个静态库,我希望能够在不同的项目 (PhysicsCore) 中使用“Utilities.lib”文件,而无需包含所有源代码。
我尝试将“Utilities.lib”文件拖放到 PhysicsCore 项目中。我尝试添加现有文件并添加“Utilities.lib”。我尝试添加 lib 文件以及所有的“.mod”和“.obj”文件。我试过在属性 -> 图书馆员 -> 附加依赖项下进行。所有这些都以 PhysicsCore 项目由于缺少程序和模块而无法编译而告终。
我已经让它以一种不太有用的方式工作。我在解决方案中添加了一个新项目,然后添加了所有“.obj”和“.mod”文件以及“.lib”文件。将解决方案设置更改为不重建该项目。然后最后将该非构建项目添加为 PhysicsCore 项目的依赖项。
我觉得我一定是错过了一些小东西。
编辑:几年后。我终于遇到了这个问题。如果库都在.f90
文件中,一切都会正常工作,但我使用的模块需要.mod
文件。据我所知,一切都在做它应该做的事情。但是,它并没有像我预期的那样运行。
【问题讨论】:
【参考方案1】:有几种方法:
-
将 .lib 作为源文件拖到项目中。你说这行不通,但我做的时候总是这样。
在 Linker 项目属性中,将 .lib 的完整路径添加到 Linker > Input > Additional Dependencies,或者只需在此处添加 .lib 名称并将目录路径添加到 Linker > General > Additional Library Directories。
如果父项目也是 Fortran,右键单击父项目,选择 Build Dependencies > Project Dependencies。选中库项目的复选框。 (如果父项目不是 Fortran,这不起作用。)
我通常会推荐 #3,因为这也会使库项目中的 .mod 文件对父项目可见。如果选择其他方法之一,则还必须通过将目录路径添加到项目属性 Fortran > General > Additional Include Directories 来使任何包含或 .mod 文件可见。
如果您在这方面需要更多帮助,我建议您在https://software.intel.com/en-us/forums/intel-visual-fortran-compiler-for-windows 中提问
【讨论】:
#1 和 #2 不起作用,正如我在原始帖子中所说的那样。也许我需要打开或更改某些设置,但对于我的生活,我无法做到这一点。对于#3,一些名称与您所说的用于这些设置的名称略有不同,但除非我实际创建一个完整的附加项目来容纳静态库,否则不会显示复选框。 如果我将 Utilities 项目中的所有 .obj 和 .mod 文件复制并粘贴到 Physics 项目的调试文件夹中,#1 确实有效。但这似乎不是预期的行为。 进一步更新。如果我将包含所有 .mod 和 .obj 文件的目录添加到 Project->Properties->Fortran->General->Additional Include Directories,#1 也可以工作。 确实,除非解决方案中有多个项目,否则#3 的选项不起作用。没有启用任何这些功能的选项 - 我要求您做的是在英特尔论坛上发帖并附上一个包含您的 .sln 和 .vfproj 文件的 ZIP,您在其中尝试过选项 3(或 1)而不复制所有 .obj 和 .mod 文件,以及构建失败后可执行项目的 buildlog.htm。 您只需要包含目录中的 .mod 文件。 .obj 文件已经在 .lib 中。以上是关于如何将静态库添加到 VS 2015 Fortran 项目?的主要内容,如果未能解决你的问题,请参考以下文章