【TDengine源码阅读】DLL_EXPORT

2025年5月13日,周二清晨


c 复制代码
#ifdef WINDOWS
#define DLL_EXPORT __declspec(dllexport)
#else
#define DLL_EXPORT
#endif

为啥Linux和MacOS平台时宏为空,难道Linux和mac不用定义导出函数吗?


这段代码是一个跨平台的宏定义,用于处理不同操作系统下动态库(DLL/SO)中函数的导出声明。具体解析如下:

  1. Windows平台(WINDOWS宏定义生效时):

    • 使用__declspec(dllexport)显式标记需要导出的函数/类,这是Windows特有的语法。

    • 例如:DLL_EXPORT void foo()会被展开为__declspec(dllexport) void foo()

  2. Linux/macOS平台(WINDOWS未定义时):

    DLL_EXPORT被定义为空,因为:

    ◦ Linux/macOS的共享库(.so/.dylib)默认导出所有符号(除非显式隐藏)。

    ◦ 若需精细控制导出,可使用__attribute__((visibility("default"))),但这不是强制要求的。

为什么Linux/macOS不需要强制导出?

• 设计差异:Windows的DLL需要显式声明导出/导入(通过.lib导入库),而Unix-like系统默认全局可见符号。

• 扩展语法:Linux/macOS通过编译选项(如-fvisibility=hidden)和属性控制可见性,而非关键字。

相关推荐
EveryPossible1 天前
大数据模型练习3
大数据
大雷神1 天前
HarmonyOS智慧农业管理应用开发教程--高高种地-- 第24篇:学习中心 - 课程体系设计
大数据·学习·harmonyos
辰宇信息咨询1 天前
3D自动光学检测(AOI)市场调研报告-发展趋势、机遇及竞争分析
大数据·数据分析
珠海西格1 天前
“主动预防” vs “事后补救”:分布式光伏防逆流技术的代际革命,西格电力给出标准答案
大数据·运维·服务器·分布式·云计算·能源
创客匠人老蒋1 天前
从数据库到智能体:教育企业如何构建自己的“数字大脑”?
大数据·人工智能·创客匠人
2501_948120151 天前
基于大数据的泄漏仪设备监控系统
大数据
Spey_Events1 天前
星箭聚力启盛会,2026第二届商业航天产业发展大会暨商业航天展即将开幕!
大数据·人工智能
AC赳赳老秦1 天前
专利附图说明:DeepSeek生成的专业技术描述与权利要求书细化
大数据·人工智能·kafka·区块链·数据库开发·数据库架构·deepseek
GeeLark1 天前
#请输入你的标签内容
大数据·人工智能·自动化
智能相对论1 天前
2万台?九识无人车车队规模靠谱吗?
大数据