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

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら

トピックに返信する


答えを正確にご入力ください。答えられるかどうかでスパムボットか否かを判定します。

BBCode: ON
[img]: ON
[flash]: OFF
[url]: ON
スマイリー: OFF

トピックのレビュー
   

展開ビュー トピックのレビュー: [C++]弱い外部リンケージ、とはなんでしょうか?

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

#3

by Tepp » 2年前

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

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

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

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

#2

by へにっくす » 2年前

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

Weak linkage in C programming

VC++に__weakというキーワードがあるかは分かりませんが…

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

#1

by Tepp » 2年前

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

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

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

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

ページトップ