qpid-users mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Adel Boutros <Adelbout...@live.com>
Subject [Proton-c 0.14.0] [Solaris SunStudio 12.1] Definition of __attribute__ macro
Date Wed, 05 Oct 2016 08:03:54 GMT

We are trying to compile Proton on Solaris. We have stumbled upon the usage of macro (__attribute__)
which is only available in GCC and not on SunStudio.

In proton-c/bindings/cpp/include/proton/internal/export.hpp:

#  define PN_CPP_EXPORT __attribute ((visibility ("default")))

Checking GCC definition of "__attribute " and "visibility", it seems that default visibility
does nothing because it is the default behavior.

Is there a reason for this definition? If not, can we safely define PN_CPP_EXPORT and PN_CPP_CLASS_IMPORT
 to empty macro in that case in the "#else" part?


visibility ("visibility_type")
This attribute affects the linkage of the declaration to which it is attached. There are four
supported visibility_type values: default, hidden, protected or internal visibility.

          void __attribute__ ((visibility ("protected")))
          f () { /* Do something. */; }
          int i __attribute__ ((visibility ("hidden")));

The possible values of visibility_type correspond to the visibility settings in the ELF gABI.

Default visibility is the normal case for the object file format. This value is available
for the visibility attribute to override other options that may change the assumed visibility
of entities.

On ELF, default visibility means that the declaration is visible to other modules and, in
shared libraries, means that the declared entity may be overridden.

On Darwin, default visibility means that the declaration is visible to other modules.

Default visibility corresponds to "external linkage" in the language.

Function Attributes - Using the GNU Compiler Collection (GCC)<https://gcc.gnu.org/onlinedocs/gcc-4.9.1/gcc/Function-Attributes.html>
6.30 Declaring Attributes of Functions. In GNU C, you declare certain things about functions
called in your program which help the compiler optimize function calls ...



  • Unnamed multipart/alternative (inline, None, 0 bytes)
View raw message