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.

相关推荐
孤独得猿21 小时前
聊天室项目开发——etcd的安装和使用
linux·服务器·c++·etcd
new coder1 天前
[c++语法学习]Day10:c++引用
开发语言·c++·学习
哼?~1 天前
C++11标准 上 (万字解析)
开发语言·c++
给大佬递杯卡布奇诺1 天前
FFmpeg 基本API avformat_alloc_context 函数内部调用流程分析
c++·ffmpeg·音视频
楼田莉子1 天前
C++学习:C++11扩展:constexpr特性
开发语言·c++·学习
eurotruck1 天前
c++贪吃蛇V1.0
开发语言·c++·贪吃蛇
Android系统攻城狮1 天前
C++进阶之操作符重载函数operator[]:用法实例(四百三十五)
开发语言·c++
liulilittle1 天前
VGW 虚拟路由器ARP剖析
开发语言·c++·编程语言·路由·sd·sdn·vgw
Juan_20121 天前
P1040题解
c++·算法·动态规划·题解
Onesoft%J1ao1 天前
C++竞赛递推算法-斐波那契数列常见题型与例题详解
c++·算法·动态规划·递推·信息学奥赛