背景:我们使用最初在 VAX/OpenVMS 上开发的非常古老的 Fortran 代码 (F77),它允许自定义链接 - 即您可以在库中定义多个符号,但可以强制链接器使用一个特定的符号。
使用 VS2010 和 Intel Fortran 2013,我正在寻找一种方法让链接器在多个库中存在时强制它使用来自特定库的符号(即 MYSUBROUTINE)。
我有一个 C++/Fortran 混合项目。内部开发的库不是我自己的,因此删除未使用的子例程并非易事。因此,为什么我要寻找一种方法来强制 VS2010/Intel Fortran 2013 链接器使用特定的子例程。
我想这个问题不是我们独有的,因为许多遗留代码库,尤其是那些使用大量 Fortran 的代码库,一定有这个问题。
最佳答案
搜索库 (.lib) 时,链接器将使用它找到的第一个匹配符号。以明确定义的顺序搜索库。要让不同的库优先于特定符号,请在链接命令行中更早地指定库(在 Linker > Input > Visual Studio 中可执行项目的附加依赖项中更早地列出它)
如果您在多个库中有多个要选择的子例程,那么您将需要使用不同的方法,例如解压缩库并为您想要的例程选择目标代码作为一个单独的步骤。
请注意,在搜索符号时目标文件优先于库。
多重定义的符号仅适用于目标文件 (.obj) 中的符号。
关于c++ - VS2010/Intel Fortran 找不到多重定义的符号,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18972748/