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

相关推荐
秋难降1 小时前
一篇文章带你了解Pandassssssssssssssss
大数据·python·pandas
数据皮皮侠2 小时前
中国汽车能源消耗量(2010-2024年)
大数据·数据库·人工智能·物联网·金融·汽车·能源
TDengine (老段)2 小时前
TDengine 转化函数 TO_TIMESTAMP 用户手册
java·大数据·数据库·物联网·时序数据库·tdengine·涛思数据
LiRuiJie2 小时前
基于Hadoop3.3.4+Flink1.17.0+FlinkCDC3.0.0+Iceberg1.5.0整合,实现数仓实时同步mysql数据
大数据·hadoop·flink·iceberg·flinkcdc
时序数据说3 小时前
时序数据库IoTDB的优势场景分析
大数据·数据库·物联网·时序数据库·iotdb
Leo.yuan3 小时前
数据处理工具是做什么的?常见数据处理方法介绍
大数据·数据库·人工智能·python·信息可视化
阿里云大数据AI技术4 小时前
[VLDB 2025]面向云计算平台的多模态慢查询根因排序
大数据·数据库·人工智能
徐礼昭|商派软件市场负责人4 小时前
数智驱动的「库存管理」:从风险系数、ABC分类到OMS和ERP系统的协同优化策略
大数据·人工智能·分类
Guheyunyi5 小时前
安全风险监测系统是什么?内容有哪些?
大数据·人工智能·深度学习·安全·信息可视化
全知科技5 小时前
API产品升级丨全知科技发布「知影-API风险监测平台」:以AI重构企业数据接口安全治理新范式
大数据·人工智能·科技·安全