1

我正在尝试使用 emscripten 将一个简单的 HelloWorld Prgramm 从 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;
    }
};

但是,如果我不包含主函数,则 emcc 编译总是会退出

错误根:没有要处理的函数。确保您阻止 LLVM 将它们视为已死(如有必要,请使用 EXPORTED_FUNCTIONS,请参阅常见问题解答)

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

  1. 使用修饰名称,据我了解名称应该是“_multi_d10HelloWorldd”。我也试过没有类名和其他一些组合。

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

    emcc -s HelloWorld.cpp -s EXPORT_ALL=1
    

无论我做什么,这些功能都不会包含在最终的 js 文件中。

根据我从EMCC 常见问题解答中了解到的情况,我需要使用 EXPORTED_FUNCTIONS,以便稍后从 JS 调用所需的函数,例如“sayHello”,取消使用相同的方法名称。这正是我以后需要做的。

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

我想到的名字是否正确?

4

1 回答 1

4

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

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

于 2014-01-19T18:11:30.057 回答