Question about _GLIBCXX_WEAK_DEFINITION macro

孙世龙 sunshilong sunshilong369@gmail.com
Fri Aug 7 01:49:52 GMT 2020


On darwin, _GLIBCXX_WEAK_DEFINITION is equivalent to __attribute__ ((weak)).
(for details, see config/os/bsd/darwin/os_defines.h :
#define _GLIBCXX_WEAK_DEFINITION __attribute__ ((weak)))

What confuses me is that there are no such similar definitions for
other platforms.
I only found such definitions for other platforms:

// Certain function definitions that are meant to be overridable from
// user code are decorated with this macro.  For some targets, this
// macro causes these definitions to be weak.
#ifndef _GLIBCXX_WEAK_DEFINITION
# define _GLIBCXX_WEAK_DEFINITION
#endif

So, can I draw the conclusion that _GLIBCXX_WEAK_DEFINITION does not
any influence on other platforms(not include darwin)?
Or am I missing something?

Here are all the related code snippets that include _GLIBCXX_WEAK_DEFINITION:
~/gcc-github/gcc-master/libstdc++-v3$ grep -Fnr
_GLIBCXX_WEAK_DEFINITION | grep -v "_GLIBCXX_WEAK_DEFINITION void*"
ChangeLog-2004:974:     (_GLIBCXX_WEAK_DEFINITION): Define.
ChangeLog-2004:975:     * include/bits/c++config
(_GLIBCXX_WEAK_DEFINITION): Define.
ChangeLog-2004:977:     _GLIBCXX_WEAK_DEFINITION.
include/bits/c++config:532:#ifndef _GLIBCXX_WEAK_DEFINITION
include/bits/c++config:533:# define _GLIBCXX_WEAK_DEFINITION
config/os/bsd/darwin/os_defines.h:40:#define _GLIBCXX_WEAK_DEFINITION
__attribute__ ((weak))
~/gcc-github/gcc-master/libstdc++-v3$

~/gcc-github/gcc-master/libstdc++-v3$ grep -Fnr _GLIBCXX_WEAK_DEFINITION
libsupc++/new_opa.cc:111:_GLIBCXX_WEAK_DEFINITION void *
libsupc++/del_ops.cc:30:_GLIBCXX_WEAK_DEFINITION void
libsupc++/new_op.cc:41:_GLIBCXX_WEAK_DEFINITION void *
libsupc++/del_opnt.cc:43:_GLIBCXX_WEAK_DEFINITION void
libsupc++/new_opv.cc:29:_GLIBCXX_WEAK_DEFINITION void*
libsupc++/del_opa.cc:46:_GLIBCXX_WEAK_DEFINITION void
libsupc++/new_opnt.cc:34:_GLIBCXX_WEAK_DEFINITION void *
libsupc++/new_opvant.cc:30:_GLIBCXX_WEAK_DEFINITION void*
libsupc++/del_opvant.cc:29:_GLIBCXX_WEAK_DEFINITION void
libsupc++/new_opva.cc:29:_GLIBCXX_WEAK_DEFINITION void*
libsupc++/new_opvnt.cc:29:_GLIBCXX_WEAK_DEFINITION void*
libsupc++/del_opvnt.cc:29:_GLIBCXX_WEAK_DEFINITION void
libsupc++/new_opant.cc:30:_GLIBCXX_WEAK_DEFINITION void*
libsupc++/del_opvs.cc:30:_GLIBCXX_WEAK_DEFINITION void
libsupc++/del_opv.cc:32:_GLIBCXX_WEAK_DEFINITION void
libsupc++/del_opvsa.cc:29:_GLIBCXX_WEAK_DEFINITION void
libsupc++/del_opva.cc:32:_GLIBCXX_WEAK_DEFINITION void
libsupc++/del_opsa.cc:29:_GLIBCXX_WEAK_DEFINITION void
libsupc++/del_op.cc:46:_GLIBCXX_WEAK_DEFINITION void
libsupc++/del_opant.cc:29:_GLIBCXX_WEAK_DEFINITION void
ChangeLog-2004:974:     (_GLIBCXX_WEAK_DEFINITION): Define.
ChangeLog-2004:975:     * include/bits/c++config
(_GLIBCXX_WEAK_DEFINITION): Define.
ChangeLog-2004:977:     _GLIBCXX_WEAK_DEFINITION.
include/bits/c++config:532:#ifndef _GLIBCXX_WEAK_DEFINITION
include/bits/c++config:533:# define _GLIBCXX_WEAK_DEFINITION
config/os/bsd/darwin/os_defines.h:40:#define _GLIBCXX_WEAK_DEFINITION
__attribute__ ((weak))


More information about the Libstdc++ mailing list