gpt4 book ai didi

c++ - 直接从 C++ 调用 D 函数

转载 作者:太空狗 更新时间:2023-10-29 20:12:34 29 4
gpt4 key购买 nike

我已经完成了 http://dlang.org/cpp_interface.html在所有示例中,即使是某些 C++ 代码调用某些 D 代码的示例,主函数也驻留在 D 中(因此被调用的二进制文件是从 D 源文件编译而来的)。文档中的“从 C++ 调用 D”示例在 D 中定义了一个函数 foo,它从 C++ 中的函数 bar 调用,而 bar 又从 D 中的主函数调用。

是否可以只从 C++ 函数中调用 D 代码?我正在尝试做如下简单的事情,但不断出现构建错误:

在 D 中:

import std.stdio;

extern (C++) void CallFromCPlusPlusTest() {
writeln("You can call me from C++");
}

然后在 C++ 中:

#include <iostream>

using namespace std;

void CallFromCPlusPlusTest();

int main() {
cout << "hello world"<<"\n";
CallFromCPlusPlusTest();
}

最佳答案

是的,这是可能的(您的里程可能会因使用的 C++ 编译器而异。)

首先,您必须从 C++ 或 D 端初始化 D 运行时。

cpptestd.d:

import std.stdio;

extern (C++) void CallFromCPlusPlusTest() {
/*
* Druntime could also be initialized from the D function:
import core.runtime;
Runtime.initialize();
*/
writeln("You can call me from C++");
//Runtime.terminate(); // and terminated
}

编译:dmd -c cpptestd.d

cpptest.cpp:

#include <iostream>

using namespace std;

void CallFromCPlusPlusTest();
extern "C" int rt_init();
extern "C" int rt_term();

int main() {
cout << "hello world"<<"\n";
rt_init(); // initialize druntime from C++
CallFromCPlusPlusTest();
rt_term(); // terminate druntime from C++
return 0;
}

编译并链接:g++ cpptest.cpp cpptestd.o -L/path/to/phobos/-lphobos2 -pthread

这对我来说适用于 Linux。

关于c++ - 直接从 C++ 调用 D 函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26923976/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com