2013-09-24 44 views
1

背景:我们使用最初开发于VAX/OpenVMS上的非常旧的Fortran代码(F77),它允许自定义链接 - 即可以在库中定义多个符号,但被赋予了强制链接器使用特定符号的能力。VS2010 /英特尔Fortran未找到多个定义的符号

使用VS2010和英特尔Fortran 2013,我正在寻找一种方式,让链接器强制它使用来自特定库中的符号(即MYSUBROUTINE),当它存在于多个库中时。

我有一个混合的C++/Fortran项目。内部开发的库不是我自己的,因此删除未使用的子例程不是微不足道的。因此,为什么我正在寻找一种方法来强制VS2010/Intel Fortran 2013链接程序使用特定的子例程。

我想这个问题对我们来说并不是独一无二的,因为许多遗留的代码库,尤其是那些有很多Fortran的代码库,都必须有这个问题。

+0

我应该问题的根本原因是,即使我排除/ FORCE:MULTIPLE选项,链接器**永远不会找到多重定义的符号,并且它始终创建一个.exe - 但它的随机作为到.exe是否会执行或有图像问题。因此,能够控制图像中使用哪个子程序是巨大的。如何让它找到一个你知道的多边定义符号的任何建议也会有所帮助。谢谢! –

回答

1

当搜索库(.lib)时,链接器将使用它找到的第一个匹配符号。图书馆按照明确的顺序进行搜索。要为特定符号优先使用不同的库,请在链接命令行的早期指定库(在早期的链接器>输入> Visual Studio中的可执行项目的附加依赖项中列出)

如果跨多个子例程您需要选择多个库,那么您将需要使用不同的方法,例如解压缩库并选择要作为单独步骤的例程的对象代码。

请注意,在搜索符号时,对象文件优先于库。

乘法定义符号仅适用于对象文件(.obj)中的符号。

相关问题