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 在标题中. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |