2

以前に生成された .obj ファイルのリンクを実行しようとしています (最新バージョンの MSVC を使用)。

これらの .obj が作成されたとき、ソース コードは次のように指定されました。

#pragma comment(lib, ...)

そのため、リンカーはソースで指定された静的ライブラリに対してリンクしようとしています。これらのライブラリを無視するようにリンカに指示して、独自のライブラリを指定できるようにする方法はありますか?

たとえば、ソースの一部が次のことを行った場合:

#pragma comment(lib, foo.lib)

リンク時に、リンカが 'foo.lib' を無視し、代わりに 'bar.lib' に対してリンクするようにします。

4

1 に答える 1

2

ソース (#pragmaディレクティブ) を変更しないのはなぜですか?

commentMSDN ページから:

ライブラリ

ライブラリー検索レコードをオブジェクト・ファイルに入れます。このコメント タイプには、リンカーで検索するライブラリの名前 (および場合によってはパス) を含むコメント文字列パラメーターを指定する必要があります。ライブラリー名は、オブジェクト・ファイル内のデフォルトのライブラリー検索レコードに従います。ライブラリが /nodefaultlib で指定されていない場合、リンカーは、コマンド ラインで名前を指定したかのように、このライブラリを検索します。複数のライブラリー検索レコードを同じソース・ファイルに入れることができます。各レコードは、ソース ファイルで検出されたのと同じ順序でオブジェクト ファイルに表示されます。

既定のライブラリと追加されたライブラリの順序が重要な場合、/Zl スイッチを使用してコンパイルすると、既定のライブラリ名がオブジェクト モジュールに配置されなくなります。次に、2 番目のコメント プラグマを使用して、追加されたライブラリの後にデフォルト ライブラリの名前を挿入できます。これらのプラグマでリストされたライブラリは、ソース コードにあるのと同じ順序でオブジェクト モジュールに表示されます。

また、linker オプションを使用してリンクNODEFALTLIBを停止foo.libし、他の lib ファイルと同じように指定するbar.libこともできます (つまり、Linker Properties ペインを使用します)。

それ以外の場合は、名前bar.libfoo.lib(生意気な解決策) に変更します。

于 2009-05-13T20:11:14.257 に答える