お世話になっております。
環境:Windows 10、Visual Studio 2015
C++でoperator newをオーバーライドしたところ、
LNK2005 "void * __cdecl operator new(unsigned __int64)" (??2@YAPEAX_K@Z) は既に MSVCRTD.lib(new_scalar.obj) で定義されています。
というエラーにぶつかりました。
https://support.microsoft.com/ja-jp/hel ... s-are-link
ではMFCが例ですが、operator newは弱い外部リンケージを使用しているため、
CRTライブラリより先にリンクすることで解決しそうです。
そこで疑問ですが、この「弱い外部リンケージ」とは具体的にどういう意味なのでしょうか?
先に他がリンクしていれば、リンクしようとしない、ということでしょうか?
ではそういう場合、自分でこの「弱い外部リンケージ」を実現するにはどういった設定をすれば可能でしょうか?
よろしくお願いいたします。
[C++]弱い外部リンケージ、とはなんでしょうか?
Re: [C++]弱い外部リンケージ、とはなんでしょうか?
written by へにっくす
Re: [C++]弱い外部リンケージ、とはなんでしょうか?
情報ありがとうございます。
「弱い外部リンケージ」だとあまりヒットしませんでしたが、Weak Symbolがキーワードのようですね。
https://stackoverflow.com/questions/229 ... 7#11529277
__declspec(selectany)や#pragma comment(linker, "/alternatename:xxx=yyy")
というのが上がっていますが、試してみたけど、関数には使えないようですし。
https://ofekshilon.com/2014/02/10/linker-weak-symbols/
ひとまず表題の件はこれで把握できたので、解決済とします。
ありがとうございました。
「弱い外部リンケージ」だとあまりヒットしませんでしたが、Weak Symbolがキーワードのようですね。
https://stackoverflow.com/questions/229 ... 7#11529277
__declspec(selectany)や#pragma comment(linker, "/alternatename:xxx=yyy")
というのが上がっていますが、試してみたけど、関数には使えないようですし。
https://ofekshilon.com/2014/02/10/linker-weak-symbols/
ひとまず表題の件はこれで把握できたので、解決済とします。
ありがとうございました。