d的共享库支持
admin
2024-03-04 05:05:57
0

原文
我正在推动D中的共享库支持进入更可用的状态.
方法如下:
构建-betterC共享库,构建依赖如上共享库的完整D可执行文件.不管你对-betterC的感觉如何,在此使用它的原因是,避免我在最初推送过程中遇见的druntime问题.
我没有在Posix上,也没在GDC上测试过.现在我只对窗口支持感兴趣,因为它有最多的平台相关问题,我完全忽略了Optlink(就我而言,这是WONTFIX).
ldcdmd都可这里工作.但是这两例,你都需要手动生成ModuleInfo块.如下所示:

export extern(C) void _D6dynlib3app12__ModuleInfoZ() {asm {naked;di 0;di 0x1000;db 0;}
}

LDCDMD都无法配置ModuleInfo生成.GDC有办法可打开和关闭它.
如果删除-betterC,由于重复符号(未导出),在dmd中该块不再工作.LDC编译正常.
代码基中,我发现因为假装是可见性修改器导出链接指令,因此--fvisibility=public是非常有用的.(但是,忽略它,因为它是DIP).
作为代码基的一部分,我正在努力让dub工作.我目前正在等待被openssl[1]vibe.d回归阻止了的PR.表明应从复制至目标目录的依赖上构建,且不链接dll,而是用他们的导入库.

如果修复它,应使如下工作:
0,在LDCDMD中,实现打开和关闭ModuleInfo生成的开关(忽略-betterC开关).
1,在DMD中导出ModuleInfo.
2,在DMD中,实现打开导出所有符号的开关.

最后:目前,除非使用-betterC或按非D库对待,DMD不适合共享库.对非-betterC,ldc是可行的.
修复错误时,发现使用MSVC链接器时,当前会破坏包含Unicode符号的共享库.
非英语用户来说,这是拦路虎.
必须要净化这些符号名,使它们是ASCII.
可惜,在测试套件中有个不完整的测试用例,它只覆盖了可执行文件.
MSVC链接器中,LDC也遇见的bug(他们像我一样通过禁止测试来解决).
喜悦,通过修复导出ModuleInfo可关闭另一个错误报告.错误
pr这里


我再次尝试解决,在窗口上,不导出ModuleInfo问题.
因为它阻止D可执行文件导入DLL中的D模块,这是个问题.
目前,除了如下,我已成功导出并添加至importedModules成员:
ModuleInfo**[],而不是ModuleInfo*[]添加.

//dmodule.d ~364
Symbol* isym; ///导入csym的版本
//toobj.d ~190,处理importedModules
import std.algorithm : canFind;
if (mod.ident.toString().canFind("second")) {if (!mod.isym) {mod.isym = s.toImport(mod.loc);outdata(mod.isym);}s = mod.isym;//s.Sflags |= SFLweak;dtb.xoff(s, 0, TYnptr);
} else {//弱引用不会从库中拉对象,如果未拉入,则解析为0.不能仅因为导入了模块,就拉入它.s.Sflags |= SFLweak;dtb.xoff(s, 0, TYnptr);
}
//导出:
objmod.export_symbol(m.csym, 0);

看起来简单,实际难.
注意:上面代码中,我硬编码为仅应用至"第二"模块,来避免构建druntime.
得到未解析错误,该错误的有趣在,它引用了ldc函数的DllImport符号.在开始运行时时有效地解引用和设置操作系统链接器的顶部做了额外修补.排除了它只是dmd的限制,而是系统链接器代码生成器级别的概念问题.

那么这对dmd表明什么呢?好吧,要么从ldc复制方法,要么按需修补.按需修补可能最好,但即在调用importedModules时,在两个地方额外内存分配来更改druntime.

相关内容

热门资讯

一什么母女 一什么母女一般不要送烟酒之类的东西,最好送一些牛奶啊,水果啊,礼盒之类的。营养的食品和精致的礼盒比较...
以花字开头的成语 以花字开头的成语 以花字开头的成语 :花里胡哨、花花绿绿、花花公子、花言巧语、花容月貌、花红柳绿...
魔兽世界邪恶骷髅战马 魔兽世界邪恶骷髅战马需要打评级战场,打75场竞技场 胜利200场 评级胜利40场!成就坐骑!
没有房子只能分手吗? 没有房子只能分手吗?如果女的真爱你,就不会考虑房子不房子问题了。她也不体谅你。如果真爱,两人一起努力...
魔兽世界 萨隆邪铁箭矢在哪啊? 魔兽世界 萨隆邪铁箭矢在哪啊?死亡骑士的新手任务真的是地上捡的。。。地上捡。。。锻造做的吧 还是工程...
我爱宝贝 我爱宝贝宝贝我爱你英文怎么翻译 oh,my baby,i love you My dear baby...
呼市土中和敬业高中相比哪个更好... 呼市土中和敬业高中相比哪个更好些?升学率、日常管理、师风学风等。如题敬业比较知名
算对这笔长远账(记录中国) 算... 本报记者 朱  磊  周  欢滕王阁景区游人如织。 彭 寰摄(影像中国)游客在滕王阁景区内打卡留影。...
西安旅游跟团游5天攻略,旅游团... 家人们,西安这座城市,那可是咱中国历史文化的瑰宝之地。它就像一座巨大的历史博物馆,每一寸土地都沉淀着...
我在他乡挺好根据什么小说改编的... 我在他乡挺好根据什么小说改编的?《我在他乡挺好的》是原创的电视剧,并不是根据小说改编的《我在他乡挺好...
我想要什么的作文 我想要什么的作文                                          ...
请问“啊莱噢莱噢莱。。。”这是... 请问“啊莱噢莱噢莱。。。”这是一首歌吗叫《我们是冠军》不对吧,应该是意大利AC米兰队的队歌.
同安第二实验小学王彪 张正霖的... 同安第二实验小学王彪 张正霖的漫画我张霖没 原稿早丢
浪子回头的例子,古今中外皆可 浪子回头的例子,古今中外皆可除了周处的那个,我已经知道了。 多多益善,谢谢大家!乐羊子受妻子劝诫浪子...
不败和主不败的区别 不败和主不败的区别不败和主不败的区别就是,不败的意思就是没有输过,此人一生对战老余无数,未尝一败,可...
足球不败怎么下 足球不败怎么下足球比赛不败的意思就是在比赛当中胜利或者平局。根据查拍吵询相关公开信息显示,主场不败就...
甄姬皮肤哪个手感好 甄姬皮肤哪个手感好甄姬皮肤哪个手感好,如下:1、冰雪圆舞曲:这款皮肤定价为888点券,但它只是勇者皮...
《知否》中墨兰是什么结局?和小... 《知否》中墨兰是什么结局?和小说中有什么不同吗?在电视剧当中,墨兰还有盛明兰两个人是和好了,并且成为...
求小说!! 求小说!!笑傲江湖好看
古代的‘天启’是什么意思? 古代的‘天启’是什么意思?即上天的启示。