d的导入c,你的下个c编译器是d编译器
原文
ImportC
是C11
编译器.关注的是标准兼容性
,而不是实现大量不同的扩展
.
火卫一(D
标准库)包含一份zlib
语言,ImportC
消除了在DMD
构建过程中需要外部C编译器
,即所有DMD
都可以由DMD
构建.实际上,这是ImportC
开发背后的动机之一.
用DMD构建oksh
oksh
不含D代码
.用OpenBSD
下类似clang
的CC
来配置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
不链接未用库.
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 25岁的心里话
· 按钮权限的设计及实现