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

相关推荐
m0_6393107920 分钟前
大数据技术原理-HDFS的安装与应用
java·大数据·jvm·hadoop·spring·hdfs·eclipse
1881050696322 分钟前
摸鱼事务所——团队作业——大模型评测作业
大数据·hadoop·分布式
程序员_大白24 分钟前
软件工程课程管理系统项目设计,零基础入门到精通,收藏这篇就够了
大数据·软件工程
我思故我在789624 分钟前
hdfs文件系统
大数据·hadoop·hdfs
老卢聊运维27 分钟前
kdc-server部署kerberos认证
大数据·运维·hdfs
刀法如飞1 小时前
Palantir Ontology 存储结构与读写机制原理深入剖析
大数据·设计模式·系统架构
AI周红伟1 小时前
通用业务智能体OpenClaw+Skills+RAG+Agent构建案例实操
大数据·人工智能·windows·百度·copilot
taocarts_bidfans3 小时前
反向海淘站点运维优化与常见技术问题排查
大数据·运维·跨境电商·独立站·反向海淘
189228048613 小时前
NY386固态MT29F32T08GWLBHD6-T:B
大数据·服务器·人工智能·科技·缓存
青春万岁!!3 小时前
hiveSQL脚本性能优化-减少表扫描
大数据·hive·sql