【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)和属性控制可见性,而非关键字。

相关推荐
KKKlucifer11 分钟前
国内数据安全服务的产品智能化转型:大模型赋能下的技术能力重构分析
大数据·数据库·重构
故七月2 小时前
AI 答案里的竞品共现:怎么看出赛道格局
大数据·人工智能
全栈陈序员2 小时前
【Git】从入门到精通(七)—— git status:查看仓库状态
大数据·git·elasticsearch
fengye2071613 小时前
第三章 编译cpython
大数据·elasticsearch·搜索引擎
大大大大晴天3 小时前
每天认识一个组件:Apache Flink
大数据
涛思数据(TDengine)3 小时前
从工业本体到 AI 原生:TDengine 出席 2026 QCon 分享工业数据基础设施路径
大数据·数据库·人工智能·tdengine·工业
Gu_WenYun4 小时前
从主题定价到订单定价:机器人基金的产业链观察
大数据·人工智能·金融
其实防守也摸鱼4 小时前
信创安全竞赛知识总结与题库
大数据·网络·人工智能·算法·安全·php
刀笔财经5 小时前
新时达的选择:先造血,再谈利润
大数据
Bode_20025 小时前
精益制造推行成熟度与核心量化评估体系
大数据·人工智能