-4

Qt Creator IDE で Source Engine 2013 コードを動作させるための小さなプロジェクトに取り組んでいます。私の最終的な目標は、それを CMake プロジェクトに変換して、Valve の制限付き VPC システムを破棄することですが、それがどのように機能するかはまだ正確にはわかりません。そのため、簡単な手順を実行しています。

私は MSVC++ 2013 コンパイラーでコンパイルすることに慣れているので、それを使用していますが、この最後の問題に遭遇しました。対処方法がわかりません。私が最初にやろうとしていることは、意図したコンパイラーで正しくコンパイルされない場合、明らかに間違っていることであり、まだコードを変更する必要はありません。

バルブには、char *__cdecl _strdup( const char *string ) を持つこの memoverride.cpp があります。これをコメントアウトすると、コードは正常にコンパイルされるため、これが私が扱っている最後の問題です。

この関数「オーバーライド」から、次の 2 つのエラーが発生します。

C2084: 関数 'char MemAlloc_StrDup(const char ) には既に本体があります

C2732: リンケージ指定が、'MemAlloc_StrDup' の以前の指定と矛盾しています

必要なコンパイラ オプション、除外する必要がある既定のライブラリ、またはこれを回避するために使用する必要があるプリプロセッサの定義を知っている人はいますか? Visual Studio でコードをコンパイルしてみました。抑制されたスタートアップ バナーを無効にして、渡されたすべてのオプションを確認しましたが、すべて試してみましたが、違いはないようでした。

それで、誰か何か考えがありますか?

どんな情報でも大歓迎です、ありがとう!

4

1 に答える 1

0

MemAlloc_StrDup/の重複した定義で発生する問題strdupは、おそらく の 2 つの定義を持つことができないという事実によって引き起こされますstrdup。これを正確に解決する MSVC++ コンパイラ オプションはありません。

One Definition Rule ではコンパイラが致命的なエラー メッセージを表示して終了したり、警告を表示したりする必要がないため、他のコンパイラでも「機能する」可能性があります。しかし、MSVC++ には、これを拒否する権利があります。

MSVC++ では、標準ライブラリをリンクしないことができます。これは全か無かのオプションであるため、問題を解決する可能性は低いです。

于 2016-03-30T11:03:29.183 に答える