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

相关推荐
睎zyl3 小时前
Spark自定义分区器-基础
大数据·分布式·spark
元6334 小时前
搭建spark-local模式
大数据·spark
巨龙之路4 小时前
TDengine编译成功后的bin目录下的文件的作用
大数据·时序数据库·tdengine
莫叫石榴姐4 小时前
大模型在数据分析领域的研究综述
大数据·数据挖掘·数据分析
百锦再5 小时前
大数据技术的主要方向及其应用详解
大数据·linux·网络·python·django·pygame
巨龙之路6 小时前
【TDengine源码阅读】#if defined(__APPLE__)
大数据·时序数据库·tdengine
巨龙之路6 小时前
【TDengine源码阅读】TAOS_DEF_ERROR_CODE(mod, code)
大数据·时序数据库·tdengine
钊兵7 小时前
hivesql是什么数据库?
大数据·hive
人大博士的交易之路8 小时前
今日行情明日机会——20250516
大数据·数学建模·数据挖掘·程序员创富·缠中说禅·涨停回马枪·道琼斯结构