1

背景: VAX/OpenVMS で最初に開発された非常に古い Fortran コード (F77) を使用しています。これにより、カスタマイズされたリンクが可能になりました。つまり、ライブラリで複数のシンボルを定義できますが、リンカーに特定のシンボルを使用するよう強制する機能が与えられました。 .

VS2010 と Intel Fortran 2013 を使用して、リンカが複数のライブラリに存在する場合に、特定のライブラリのシンボル (つまり MYSUBROUTINE) を強制的に使用する方法を探しています。

C++/Fortran プロジェクトが混在しています。社内で開発されたライブラリは私自身のものではないため、使用されていないサブルーチンを削除することは簡単ではありません。したがって、VS2010/Intel Fortran 2013 リンカーに特定のサブルーチンを使用させる方法を探しているのはなぜですか。

多くのレガシー コード ハウス、特に多くの Fortran を使用するハウスでは、この問題が発生する必要があるため、この問題は私たちに固有のものではないと思います。

4

1 に答える 1

1

ライブラリ (.lib) を検索する場合、リンカーは最初に見つかった一致するシンボルを使用します。ライブラリは明確に定義された順序で検索されます。特定のシンボルに対して別のライブラリを優先させるには、リンク コマンド ラインの前の方でライブラリを指定します (Visual Studio 内の実行可能プロジェクトの [リンカー] > [入力] > [追加の依存関係] で先にリストします)。

選択したい複数のライブラリにまたがる複数のサブルーチンがある場合は、別の手順としてライブラリをアンパックし、必要なルーチンのオブジェクト コードを選択するなど、別の方法を使用する必要があります。

シンボルを検索するときは、オブジェクト ファイルがライブラリよりも優先されることに注意してください。

複数定義されたシンボルは、オブジェクト ファイル (.obj) 内のシンボルにのみ適用されます。

于 2013-09-24T05:21:04.323 に答える