2312d,d语言作为胶水,用C++调用rust

原理

源码:

cpp 复制代码
//主.cpp
void foo();
int 主()
{
    foo();
    中 0;
}

编译r.rs(被调用函数)文件:

cpp 复制代码
//r.rs编译命令.
rustc --target i686-pc-windows-msvc r.rs --crate-type staticlib 
//r.rs文件内容,生成r.lib(11.2M)有点大.
//用要staticlib.否则不行.
//如果没有`i686-pc-windows-msvc`,会提示你下载.
pub fn foo() {
    println!("Hello from Rust");
}

中间的d胶水代码:

cpp 复制代码
//g.d
@nogc:
pragma(mangle, "_ZN1r3foo17h9ff7108a58612db8E") void foo_from_rust();
//从r.rs里面可以找到foo的混杂.
extern(C++) void foo()
{
    foo_from_rust();
}//按C++的foo调用.

正常编译main.cppmain.obj

编译胶水dmd -c g.dg.obj.

然后用

cpp 复制代码
link *.obj r.lib 一堆常见的lib
//常见的lib为平时编译C++的lib.

连接,注意加上不常见的两个lib:

cpp 复制代码
userenv.lib ntdll.lib

然后就可以链接为exe,得到g.exe,再运行:

cpp 复制代码
|| Hello from Rust

即,可以从C++方调用Rust.

相关推荐
梦醒沉醉16 分钟前
15、Rust程序设计语言——无畏并发
rust
牢姐与蒯18 分钟前
c++高级数据结构之图(基本概念,存储结构,BFS,DFS,最小生成树)
数据结构·c++·
k4m7v2pz40 分钟前
34 天 33 个版本:rvs(rust-verb-shell)如何用版本号对抗 AI 误判
rust·shell·命令行工具·ai agent·系统信息·跨平台开发
c238561 小时前
MySQL 基础用法(下):查询进阶与核心特性
android·c语言·c++·mysql
码匠许师傅1 小时前
【C++ 面试真题】 C++ 中的 static 有什么作用?
c++·面试
郭涤生1 小时前
C++ 零拷贝(Zero-Copy)
linux·开发语言·c++
乐观勇敢坚强的老彭1 小时前
计算机内存中的堆和栈
c++
间歇性努力持续性发呆的野生快乐选手2 小时前
dfs回溯,bfs枚举,完全背包
c++·算法·深度优先·宽度优先
码工许师傅3 小时前
一文读懂《Effective C++ 第三版》的55条黄金法则
c++
ao-weilai3 小时前
C++基础:C++11部分内容
开发语言·c++·c++11