※ ChatGPTを利用し、要約された質問です(原文:operator new が再定義されています)
operator new が再定義されています
このQ&Aのポイント
自社製のライブラリを使用してPCゲーム開発をしています。ゲームにネット接続の機能を持たせるためにFTPダウンロードの仕組みを試作しました。
しかし、ゲームプログラムに組み込む際に「error LNK2005: void * __cdecl operator new(unsigned int) は既に (自社製ライブラリ).lib で定義されています。」というエラーが発生しました。
自社製ライブラリとnafxcwd.libとの間で衝突が発生しているため、どちらかを削除することはできず、共存させる方法はないか悩んでいます。開発者が不在のため、質問をして解決策を探しています。
自社製のライブラリを使用してPCゲーム開発をしています。
今回、ゲームにネット接続の機能を持たせることとなりました。
ネットゲーム、というほどのものでもなく、
特典のデータがダウンロードできる、といった程度ですが。
コレのためにFTPダウンロードの仕組みを試作しました。
検証用のコンソールアプリケーションではうまくいったのですが、
いざゲームプログラムに組み込んだところ、
nafxcwd.lib(afxmem.obj) : error LNK2005: "void * __cdecl operator new(unsigned int)" (??2@YAPAXI@Z) は既に (自社製ライブラリ).lib(Allocator.obj) で定義されています。
1>nafxcwd.lib(afxmem.obj) : error LNK2005: "void __cdecl operator delete(void *)" (??3@YAXPAX@Z) は既に (自社製ライブラリ)..lib(Allocator.obj) で定義されています。
1>nafxcwd.lib(afxmem.obj) : error LNK2005: "void * __cdecl operator new[](unsigned int)" (??_U@YAPAXI@Z) は既に libcpmtd.lib(newaop.obj) で定義されています。
1>nafxcwd.lib(afxmem.obj) : error LNK2005: "void __cdecl operator delete[](void *)" (??_V@YAXPAX@Z) は既に LIBCMTD.lib(delete2.obj) で定義されています。
1>C:\Users\New Challenger\PROGRAMING\(開発中).exe : fatal error LNK1169: 1 つ以上の複数回定義されているシンボルが見つかりました。
というエラーが発生。
「http://support.microsoft.com/kb/148652/ja」 の説明を参考に対処してみたところ、
1>(自社製ライブラリ).lib(Allocator.obj) : error LNK2005: "void * __cdecl operator new(unsigned int)" (??2@YAPAXI@Z) は既に nafxcwd.lib(afxmem.obj) で定義されています。
1>(自社製ライブラリ).lib(Allocator.obj) : error LNK2005: "void __cdecl operator delete(void *)" (??3@YAXPAX@Z) は既に nafxcwd.lib(afxmem.obj) で定義されています。
1>C:\Users\New Challenger\PROGRAMING\(開発中).exe : fatal error LNK1169: 1 つ以上の複数回定義されているシンボルが見つかりました。
となってしまうのですね。
ぶつかり合っている両者のうちの、どちらかがなければエラーを避けられるのは確かなんですが、
自社製ライブラリの方のnew/deleteも、アプリケーションの仕組みに合わせて変形させてあるものなので取っ払ってしまうわけにもいかず、、、
何かうまいこと共存させる方法はないものでしょうか?
自社製のライブラリではありますが、
開発者の方が今現在社を離れているためすぐに回答を得られないので、
広く知恵を貸していただきたいのです。
お礼
回答ありがとうございます。 早速、お教えいただいたことを参考に、いろいろと試してみたいと思います。 本当なら、 「うまくいきました、ありがとう!」 といいたいのですが、 まだちょっと実装と検証に時間がかかってしまいそうなので。 まずはなにより、お答えをいただけたことにお礼申し上げます!