2

私は VC10 を使用しています (ただし、これは VC9、VC10、および VC11 に適用されると思います)。要するに、リリース ライブラリをコンパイルして出荷し、ユーザーがアプリケーションのデバッグまたはリリースビルドを作成するときにそのライブラリにリンクできるようにしたいと考えています。迷惑なことに、LNK4204 エラーが発生し続けます。たとえば、次のようになります。

mylib.lib(an_object_in_my_lib.obj) : warning LNK4204: '[PATH TO USER APPLICATION INTERMEDIATE DIRECTORY]\vc100.pdb' is missing debugging information for referencing module; linking object as if no debug info

罰金。私はこれが言っていることを理解しています。私の最初の反応は、「まあ、これをオフにするのは簡単だろう」というものでした。しかし、私はこれを防ぐ方法を見つけることができません。私が驚いたことは次のとおりです。

  1. ライブラリ プロジェクトの設定で、デバッグ情報なしでコンパイルするオプションを見つけることができません (リリース時でも!) - 神に誓って、方法があると断言できます!
  2. ユーザー アプリケーション プロジェクトの設定に、デバッグ情報がないことをリンカに指示するためのオプションが見つかりません。

これに対する良い解決策はありますか?おそらく、デバッグ情報なしでライブラリにリンクしたいが、作成中のバイナリのデバッグ情報を生成することは珍しくありませんか? カーネル ライブラリと crts へのリンクについてはどうですか? これまでにこの問題を発見したことがないとは信じられません。明らかなようです (私が憤慨していることがわかりますか?)。

参考までに、人々が言う前に、私はリバース エンジニアリングのリスクを最小限に抑えたいので、デバッグ情報を含むリリース ライブラリを出荷したくありません。ユーザーにバグが発生し、pdb 情報がない場合、後悔するだろうと言う人もいますが、私はそれを気にしないと言いますが、私を信じてください。

アップデート:

私は問題を回避したと信じていますが、なぜそれが機能するのか完全にはわかりません。間違いなく、これをもう少し調べる必要があります。しかし、要するに、私は VC9 でビルドできます (そして実際にそうする必要があります)。VC9 では、実際には、VC10 には表示されない「デバッグ情報形式」の「無効」の追加オプションが提供されることに注意してください。これは私の混乱の一部を説明するかもしれません。

現在、「解決策」は、ライブラリのデバッグバージョンを作成することであるように思われましたが(私はそれで問題ありません)、デバッグ情報を「無効」のままにしておきます。私がこれを行うとき、私は苦情を受けません。どちらの場合もデバッグ情報がないため(デバッグをリリースにリンクし、デバッグをデバッグにリンクしている場合)、非常に奇妙ですが、デバッグライブラリにリンクすると警告が表示されません。ここまではちょっと謎です。時間があれば、さらに調査します。多分私は何かが足りない!

4

1 に答える 1

0

警告を回避する唯一の方法は、シンボル情報を提供することです。賢ければ、リンカーを満足させるのに十分なシンボル情報を提供できるかもしれませんが、コードのリバース エンジニアリングを容易にするという想像上のリスクを高めるには十分ではありません。

于 2013-03-24T03:05:05.950 に答える