2024年4月18日发(作者:)
易语言手册
版本:1.0
作者:明
日期:2010年元月
综述
易语言静态编译技术手册,主要介绍易语言静态编译方案,以及
支持库改造方法。
易语言5.0“基于第三方链接器的”静态编译方案的核心是:把易
语言编译器生成的中间数据,编译成COFF格式的obj文件,然后把
它交给第三方链接器,与各支持库的静态库(*.lib文件)一起链接生
成EXE/DLL。
为了配合静态编译,易语言编译器、核心支持库、集成开发环境
(IDE)均已做出重大更新,绝大多数官方支持库已完成自身改造。
第三方支持库需要作者按照本文介绍的方法完成支持库改造,以
便支持静态编译。未经静态编译改造的原有支持库,仍可在新版易语
言中使用,只是不能支持静态编译。
支持库静态编译改造
目的:使该支持库可以支持静态编译
途径:1、在原支持库(.fne)基础上额外输出部分信息;2、提供支
持库的静态库,并按要求导出特定的函数符号
为了支持静态编译,对支持库框架做了扩展性修改,这种修改不
会对现有的支持库造成任何负面影响。即:如果不需要支持静态编译,
现有的支持库不需要做任何修改;如果已经做了修改,也不影响原有
功能和使用方式。最大程度的保持支持库的向前向后兼容性。
今后支持库要分为两个版本:一个动态库版(即现有的fne/fnr
等),一个静态库版。
动态库版支持库,除了提供向后兼容的运行时支持外,还要在静
态编译连接期间提供数据支持。
静态库版支持库,用于静态编译连接,编译连接期间需要动态库
版支持库的支持,但编译连接后生成的EXE/DLL不依赖任何非系统库。
动态库版和静态库版,基本上还是使用同一套源代码,只是在必
要的地方用C/C++预定义宏(__E_STATIC_LIB)区分。
以下说明中将明确区分静态库和动态库。
为支持静态编译,易语言支持库开发包接口文件 lib2.h 中增加了
以下通知项(系统发送给支持库的通知, PFN_NOTIFY_LIB):
#define NL_GET_CMD_FUNC_NAMES 14
// 返回所有命令实现函数的的函数名称数组(char*[]), 支持静态编
译的动态库必须处理
#define NL_GET_NOTIFY_LIB_FUNC_NAME 15
// 返回处理系统通知的函数名称(PFN_NOTIFY_LIB函数名称), 支
持静态编译的动态库必须处理
#define NL_GET_DEPENDENT_LIBS 16
// 返回静态库所依赖的其它静态库文件名列表(格式为0分隔的文
本,结尾两个0), 支持静态编译的动态库必须处理
发布者:admin,转转请注明出处:http://www.yc00.com/web/1713447915a2250889.html
评论列表(0条)