[C++]弱い外部リンケージ、とはなんでしょうか?

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
Tepp
記事: 13
登録日時: 7年前
住所: フォッサマグナ
連絡を取る:

[C++]弱い外部リンケージ、とはなんでしょうか?

#1

投稿記事 by Tepp » 6年前

お世話になっております。

環境: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ライブラリより先にリンクすることで解決しそうです。

そこで疑問ですが、この「弱い外部リンケージ」とは具体的にどういう意味なのでしょうか?
先に他がリンクしていれば、リンクしようとしない、ということでしょうか?
ではそういう場合、自分でこの「弱い外部リンケージ」を実現するにはどういった設定をすれば可能でしょうか?

よろしくお願いいたします。

アバター
へにっくす
記事: 634
登録日時: 11年前
住所: 東京都

Re: [C++]弱い外部リンケージ、とはなんでしょうか?

#2

投稿記事 by へにっくす » 6年前

以下が参考になるかも(英語ですが、ソースを見れば何となく解かる?)

Weak linkage in C programming

VC++に__weakというキーワードがあるかは分かりませんが…
written by へにっくす

Tepp
記事: 13
登録日時: 7年前
住所: フォッサマグナ
連絡を取る:

Re: [C++]弱い外部リンケージ、とはなんでしょうか?

#3

投稿記事 by Tepp » 6年前

情報ありがとうございます。

「弱い外部リンケージ」だとあまりヒットしませんでしたが、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/

ひとまず表題の件はこれで把握できたので、解決済とします。
ありがとうございました。

返信

“C言語何でも質問掲示板” へ戻る