gpt4 book ai didi

在 Emscripten 中使用的 C++ mangling 名称

转载 作者:行者123 更新时间:2023-11-30 02:49:43 24 4
gpt4 key购买 nike

我正在尝试使用 emscripten 将一个简单的 HelloWorld 程序从 C++ 编译为 Javascript。当我包含一个调用例如的主要功能时,它工作正常多功能。这是我的代码 (HelloWorld.cpp)。

#include <stdio.h>

class HelloWorld {
public: void sayHello() {
printf("Hello World Klasse! %f", multi(7));
}

public: double multi(double x){
return x * x;
}
};

但是,如果我不包含 main 函数,emcc 编译总是会输出

ERROR root: No functions to process. Make sure you prevented LLVM from eliminating them as dead (use EXPORTED_FUNCTIONS if necessary, see the FAQ)

我知道“EXPORTED_FUNCTIONS”选项,它告诉编译 .js 文件应包含哪些函数。我尝试了各种不同的东西:

  1. 据我所知,使用改编名称this名称应为“_multi_d10HelloWorldd”。我也尝试过不使用类名和其他一些组合。

    emcc -s HelloWorld.cpp -s EXPORTED_FUNCTIONS='["_multi_d10HelloWorldd"]'
  2. 使用修饰符 EXPORT_ALL

    emcc -s HelloWorld.cpp -s EXPORT_ALL=1

无论我做什么,函数都不会包含在最终的 js 文件中。

据我了解 EMCC FAQ我需要使用 EXPORTED_FUNCTIONS 以便稍后调用所需的函数,例如JS 中的“sayHello”取消了相同的方法名称。这正是我以后需要做的。

有人可以指点我一个解决方案或任何其他我可能没有想到的可能的选择吗?

我想的这个mangling名字对吗?

最佳答案

创建一个“extern c” block 。在此 block 内定义要向 javascript 公开的函数。这些函数应使用下划线作为前缀。在其中一个函数中,您可以实例化您的 C++ 类。

这与编写动态库时采用的方法相同,其优点是您可以根据需要在 native 程序中重用您的库。

关于在 Emscripten 中使用的 C++ mangling 名称,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20991893/

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