#ifdef PHP_WIN32
# include "tsrm_win32.h"
# include "win95nt.h"
# ifdef PHP_EXPORTS
# define PHPAPI __declspec(dllexport)
# else
# define PHPAPI __declspec(dllimport)
# endif
# define PHP_DIR_SEPARATOR '\\'
# define PHP_EOL "\r\n"
#else
# if defined(__GNUC__) && __GNUC__ >= 4
# define PHPAPI __attribute__ ((visibility("default")))
# else
# define PHPAPI
# endif对比以上代码分析:
window 中,动态库dll中的符号需要导出时,必须在函数定义开头处加上 PHPAPI 即__declsspec(dllexport), 然后其他地方如果需要使用此dll中导出的符号,需要extern __declsspec(dllimport) 声明导出符号, (通常使用方和服务方都是包含同一个头文件,头文件中 PHPAPI自动识别 分别为 __declspec(dllexport) __declspec(dllimport)
linux中 默认符号是导出的,如果编译链接从那时 -fvisilibility 则会将所有的默认导出符号隐藏( 对于__attribute__((visibility("default"))))定义的函数 始终是导出符号
其他地方引用导出符号 直接extern PHPAPI 即可
本文探讨了Windows和Linux环境下动态链接库(DLL)中符号的导出机制。在Windows中,通过__declspec(dllexport)来标记导出符号,并在使用方通过__declspec(dllimport)导入;而在Linux中,默认所有符号都被导出,除非特别指定隐藏。

869

被折叠的 条评论
为什么被折叠?



