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.

相关推荐
jeffwang6 小时前
我把同一个压测做错了三次,第四次才发现真正的瓶颈
分布式·性能优化·rust
Augustzero6 小时前
为什么高性能调度器都在“偷任务”?从无锁队列看懂工作窃取
c++·后端
(Charon)6 小时前
【C++】线程安全队列(三):MPSC无锁队列、atomic与链表节点实现
c++·安全·链表
(Charon)6 小时前
【C++】:使用 mutex + deque 实现一个简单的 LockedQueue
开发语言·c++
星轨初途6 小时前
LeetCode 热题 100——day10 和为 K 的子数组
开发语言·c++·算法·leetcode
有点。6 小时前
C++广度优先搜索(二)-练习题
c++·算法·宽度优先
Q741_1476 小时前
TcpDump 使用笔记
网络·c++·笔记·测试工具·tcpdump
程序猿编码6 小时前
不用PyTorch,不用CUDA,我用C++手写了一个能跑GPT和Whisper的推理库
c++·pytorch·gpt·大模型·whisper
MC皮蛋侠客7 小时前
TDengine C++ 系列(1):全景与最小闭环——从时序数据到第一个 C++ 读写
大数据·c++·tdengine
程序员爱钓鱼7 小时前
Rust 生命周期详解:生命周期标注、约束与真实项目应用
后端·面试·rust