d的导入c,你的下个c编译器是d编译器

原文
ImportCC11编译器.关注的是标准兼容性,而不是实现大量不同的扩展.
火卫一(D标准库)包含一份zlib语言,ImportC消除了在DMD构建过程中需要外部C编译器,即所有DMD都可以由DMD构建.实际上,这是ImportC开发背后的动机之一.

用DMD构建oksh

oksh不含D代码.用OpenBSD下类似clangCC来配置oksh.
DMD使用与C编译器不同的标志.首先要注意,DMD没有-o标志,如果要设置输出文件名,要使用-of(注意,没有空格).D本身不使用预处理器,因此在使用ImportC时,与C预处理器标志不同.该标志是-P=.如,oksh使用-DEMACS-DVI接口标志,对DMD,这些标志需要转换为-P=-DEMACS-P=-DVI.

//Makefile
.c.o:
	${CC} ${CFLAGS} -of$@ -c $<

结合CFLAGS产生:

dmd -g -O -P=-DEMACS -P=-DVI -ofalloc.o -c alloc.c
//-P,P为预处理

OpenBSD使用gnu扩展汇编.
DMD虽然理解内联汇编,但它不理解GNU扩展汇编.
#ifdef简单去掉.运行make,

dmd -g -O -P=-DEMACS -P=-DVI -ofc_ksh.o -c c_ksh.c
c_ksh.c(1210): 错误.
//还不支持

clang编译.expr.c也不能编译,其他都编译过了.
修改-lcurses链接为-L=-lcurses.
会遇到很多链接错误.再加上-P=-D_ANSI_LIBRARY预处理指令,就可以编译通过了.
加上-betterC标志,再加上-inline/-release,加上-L=--as-needed标志,告诉lld不链接未用库.

posted @   zjh6  阅读(29)  评论(0编辑  收藏  举报  
相关博文:
阅读排行:
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 25岁的心里话
· 按钮权限的设计及实现
点击右上角即可分享
微信分享提示