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

相关推荐
小高不会迪斯科19 分钟前
MIT 6.824学习心得(1) 浅谈分布式系统概论与MapReduce
大数据·mapreduce
TDengine (老段)28 分钟前
使用 StatsD 向 TDengine 写入
java·大数据·数据库·时序数据库·iot·tdengine·涛思数据
Gauss松鼠会39 分钟前
GaussDB权限管理:从RBAC到精细化控制的企业级安全实践
大数据·数据库·安全·database·gaussdb
myskybeyond1 小时前
时序数据库TDEngine安装和使用
服务器·时序数据库·tdengine
时序数据说1 小时前
时序数据库IoTDB用户自定义函数(UDF)使用指南
大数据·数据库·物联网·开源·时序数据库·iotdb
大师兄带你刨AI2 小时前
「AI产业」| 《中国信通院&华为:智能体技术和应用研究报告》
大数据·人工智能
武子康2 小时前
大数据-31 ZooKeeper 内部原理 Leader选举 ZAB协议
大数据·后端·zookeeper
zkmall2 小时前
ZKmall模块商城批发电商平台搭建方案,多商户支持 + 订单管理功能全覆盖
大数据·人工智能
Edingbrugh.南空3 小时前
Flink Postgres CDC 环境配置与验证
大数据·flink
isNotNullX4 小时前
什么是数据分析?常见方法全解析
大数据·数据库·数据仓库·人工智能·数据分析