私たちが作成したが一般的に行うサードパーティのソフトウェアではなく、は何らかの奇妙な動作をします:静的なlibとしてビルドされているため、作成するPDBファイルはvc.pdbと呼ばれ、中間フォルダ。これで、約12のpdbファイルが作成されます。これらのファイルはすべて異なるフォルダにあり、すべてが異なるライブラリと異なる設定の同じ名前を持ちます。ビジュアルスタジオで使用可能なツールでpdbファイルの名前を変更しますか?
私たちのコードにこのサードパーティのソフトウェアを統合すると、pdbの焼き付けられたパスが明らかにすべてのマシンに存在しないので、LNK4099
の警告が表示されます。サードパーティのソフトウェアが1つの出力ディレクトリに複数の.libファイルを生成するため、vc < ...> .pdbファイルを一緒に配置することはできません。
私は私のコントロール下にあるものにpdb名で焼いたlibファイルにパッチを当てる方法を探しています。 Visual Studioビルドツールはこれを行う方法を提供していますか?
編集:私たちは何をしているのか詳しく説明しましょう: 私たちは、私たちのプロジェクトにいくつかのサードパーティの静的なlibを統合することに決めました。プロジェクト自体はソースパッケージとして提供されます。ある開発者またはビルドサーバー、またはさまざまなビルド構成でa.libおよびb.libという静的にリンクされたlibsを生成するこのソースパッケージを作成する人。それらを使用すると、デフォルトのビジュアルスタジオ構成ではvc110.pdbファイルが生成されます。これは、すべて同じVSが自動的に$(IntDir)に配置されるためです。だから、pdbファイルはどこにでもあります。 これらのサードパーティのバイナリを、指定したプロジェクトXのVCSにコミットします。 プロジェクトXで静的ライブラリを使用する人は、最終バイナリにリンクする必要があります。これは、pdbファイルがVCSになく、このマシンでは使用できないため、LNK4099が生成される時刻です。
しかし、実際にはvc110.pdbファイルをすべてコミットすることはできません。なぜなら、これは役に立たないからです。完全修飾パスは静的ライブラリに組み込まれているため、他のユーザはそれを複製することができません。リンク中にPDBへのフルパスが見つからないため、libファイルの場所にvc110.pdbがあります。 サードパーティのパッケージはa.libとb.libを同じディレクトリに置くことにしたので、サードパーティパッケージのビルドを変更してvcxprojのpdbファイルの名前を変更しない限り、pdbファイルを適切に配置することはできませんlibsの世代を別々のディレクトリ(vcxprojでも可能)に分割することができます。
サードパーティのビルドファイルをいつでも変更することができます。私はこのサードパーティ製のパッケージのプレーンな新鮮なダウンロードを使用して、いくつかの "シンプルな "バッチスクリプトです。 このパッケージのデフォルトの結果は以下のとおりです。
は/Bin
/Debug
a.lib
b.lib
/Release
a.lib
b.lib
/Temp
/A
/Debug
vc110.pdb
/Release
vc110.pdb
/B
/Debug
vc110.pdb
/Release
vc110.pdb
私が本当に欲しいのはビルド後に生成されたファイルにパッチを適用することです。 私の「シンプルな」バッチ(または何でも)のスクリプトでは、pdbファイルの名前をa.pdbとb.pdbに変更することができます。これはリンカがvc110.pdbをコンパイル済みのままであるため、名前で。そのため、私はlibやdumpbinなどのツールを使って、生成したlibsを新しいpdb名にパッチする方法を探しています。そのような
:
$ magic /showPDB a.lib
> D:\some_users_machine\unique_path\package\Temp\A\Debug.vc110.pdb
$ magic /newPDB a.lib d:\path\a.pdb
> New PDB name is d:\path\a.pdb
消費者は、それは上記のパスでa.pdbを探ししようとしないだろう、私のパッチを適用しa.libをリンクします。もちろん、ほとんどのマシンでは見つからないでしょうが、リンカはまた、a.pdbを探す場所でa.pdbを探します。libが配置されていて、今はすべての人にそれを置くことができました。
編集2:による意見のベースに近いために:私はリンカオプション/ PDBALTPATHを見てみましょうPDBの場所に
まあ、それはこのように動作することを、むしろ重要。 *最終的な* pdbファイルは、実行可能ファイル(dllまたはexe)と一致する必要があります。しかし、ライブラリーがリンクされるまで、そのペダルは金属に合っていない静的ライブラリー・プロジェクトを使用すると、それは延期されなければなりません。その時点で、vcxyz.pdbファイルのデバッグエントリがマージされ、最終的なものが生成されます。あなたは明らかにリンカの警告を生成するとき何か間違っている、あなたは何かがあるかもしれない何か手がかりを残しました。 * 1つの設定に対してこの権利を得ることに最初に焦点を当て、残りは待つことができます。 –
@HansPassant私が行っていることを明確にするために元の投稿を更新しました。 – Samuel