在chromium源代码中BASE_EXPORT做什么?

What does BASE_EXPORT in chromium sourcecode do?

本文关键字:EXPORT 什么 BASE chromium 源代码      更新时间:2023-10-16

在研究chromium源代码时,我发现许多类都使用在base_export.h中定义的宏BASE_EXPORT,该宏应该修饰类和函数以供公共使用。

我就是不明白这个概念。这是否应该取代"经典"的方法,有一个包含文件夹,例如,所有的头都放在这意味着公共使用?BASE_EXPORT是如何工作的呢?例如,当向chromium添加新功能时,应该如何使用这样的修饰函数?

Chromium支持使用组件构建(多个共享库)和常规构建(单个库)构建chrome。

在组件构建中,正在构建的组件,例如BASE、NET、CONTENT,对BASE组件使用<COMPONENT>_EXPORT宏名称ex: BASE_EXPORT。

当此宏用于构建组件时,宏在MSVC编译器上扩展为__declspec(dllexport),在GCC/Clang上扩展为__attribute__((visibility("default")))。这有助于组件导出要从外部使用的内容(外部可见性)。

当它符号被其他使用BASE组件的组件使用时,通过包含它的头,宏在MSVC上扩展为__declspec(dllimport),而在GCC/Clang上没有扩展。这有助于其他组件从依赖的组件中导入内容。

如果这些模块在加载时支持隐式动态链接。

虽然是常规构建,但该宏扩展为空。

参考:铬模块化组件构建/共享库/多dll构建导出符号

也可参考,GCC可见性,MSVC导入/导出

这是多个实现(操作系统)从共享/动态库导出函数所需的功能