用于Emscripten的C ++ mangling名称

时间:2014-01-08 09:41:01

标签: c++ name-mangling emscripten

我正在尝试使用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编译总是会出现

  

错误root:没有要处理的函数。确保您阻止了LLVM   从消除死亡(必要时使用EXPORTED_FUNCTIONS,   见常见问题)

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

  1. 使用修改名称,据我所知this,名称应为'_multi_d10HelloWorldd'。我也试过没有classname和其他一些组合。

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

    emcc -s HelloWorld.cpp -s EXPORT_ALL=1
    
  3. 无论我做什么,这些功能都不会包含在最终的js文件中。

    根据我对EMCC FAQ的理解,我需要使用EXPORTED_FUNCTIONS,以便稍后我可以调用所需的函数,例如来自JS的'sayHello'取消了相同的方法名称。 这正是我以后需要做的。

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

    我认为错误名称是否正确?

1 个答案:

答案 0 :(得分:3)

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

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