加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

c – 是否应在声明或定义中指定visibility属性?

发布时间:2020-12-16 07:09:59 所属栏目:百科 来源:网络整理
导读:在 his paper about shared libraries中,Ulrich Drepper建议在构建库时将符号可见性全局设置为隐藏,然后在源代码中将每个符号设置为默认值以便公开导出它.但是,在搜索之后,我仍然不明白应该在哪里指定visibility属性:在声明中,还是在定义中?由于任何不属于
在 his paper about shared libraries中,Ulrich Drepper建议在构建库时将符号可见性全局设置为隐藏,然后在源代码中将每个符号设置为默认值以便公开导出它.但是,在搜索之后,我仍然不明白应该在哪里指定visibility属性:在声明中,还是在定义中?由于任何不属于接口的符号都不会在公共头文件中声明,我认为后面的选项更好,但 this page from Microsoft让我怀疑:在那里,相应的属性似乎是在头文件中设置的.

例如,在libwayland,一个Wayland协议的开源实现,它完成如下:

wayland-client.h:

void wl_event_queue_destroy(struct wl_event_queue *);

wayland-client.c:

WL_EXPORT void
wl_event_queue_destroy(struct wl_event_queue *)
{
    /* ... */
}

我担心与其他编译器和平台的兼容性:GCC,Clang,MSVC,……另请注意,此问题也适用于C.

解决方法

它对GNU来说并不重要,但是在Windows上,头部声明需要用dllimports进行注释,因此习惯上也可以在其中放置可见性注释.

请注意,只需要在编译库本身时启用visiblity注释,而不是在编译仅调用库函数的代码时,因此大多数项目都会执行类似的操作.

#ifndef WL_EXPORT
# define WL_EXPORT
#endif

在标题中.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读