Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/129.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 在头文件中实现的结构是否需要“属性”(可见性(“默认”))?(C+;+;)_C++_Api_Shared Libraries_Visibility - Fatal编程技术网

C++ 在头文件中实现的结构是否需要“属性”(可见性(“默认”))?(C+;+;)

C++ 在头文件中实现的结构是否需要“属性”(可见性(“默认”))?(C+;+;),c++,api,shared-libraries,visibility,C++,Api,Shared Libraries,Visibility,我不确定在头文件中完全实现struct是否会对其作为共享库的一部分使用时对“\u属性(可见性(“默认”))”的需求产生任何影响。如果使用 -fvisibility=hidden 所有导出的函数和变量设置为visibility default,共享库的用户可以使用这些函数和变量,这些函数和变量将在执行以下操作时显示: nm -C -D <library>.so nm-C-D.so 然后,当您将其设置为默认值和不设置时,您可以看到差异。对于完全内联类,您不需要将可见性设置为默认值。

我不确定在头文件中完全实现
struct
是否会对其作为共享库的一部分使用时对“\u属性(可见性(“默认”))”的需求产生任何影响。

如果使用

-fvisibility=hidden
所有导出的函数和变量设置为visibility default,共享库的用户可以使用这些函数和变量,这些函数和变量将在执行以下操作时显示:

nm -C -D <library>.so
nm-C-D.so

然后,当您将其设置为默认值和不设置时,您可以看到差异。

对于完全内联类,您不需要将可见性设置为默认值。实际上添加它是不可取的,因为它会强制从所有共享模块导出类的符号,这些共享模块包括此头,这会增加二进制文件的大小并降低启动速度。

这并不能完全回答问题。问题是它是否会使结构与其在头文件中实现的所有结构有所不同。我给出的论点是“头文件随库一起提供,因此无需在这些结构上使用可见性默认值”……可见性只是设置或不设置共享库中的符号,以便在之后可以使用,如果不需要将其设置为默认值,则无需更改设置或不设置