簡體   English   中英

用於Emscripten的C ++ mangling名稱

[英]C++ mangling name for use in Emscripten

我正在嘗試使用emscripten從C ++編譯一個簡單的HelloWorld Prgramm到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編譯總是會輸出

錯誤root:沒有要處理的函數。 確保您阻止LLVM將其消除(如有必要,請使用EXPORTED_FUNCTIONS,請參閱常見問題解答)

我知道'EXPORTED_FUNCTIONS'選項,它告訴我們應該在compile .js文件中包含哪些函數。 我嘗試了各種不同的東西:

  1. 使用重整名稱,據我了解這個名字應該是“_multi_d10HelloWorldd”。 我也嘗試過沒有classname和其他一些組合。

     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'取消相同的方法名稱。 而這正是我以后需要做的。

有人可以指點我解決方案或任何其他可能的選項,我可能沒想過?

我認為錯誤的名字是否正確?

創建一個“extern c”塊。 在此塊中定義要向javascript公開的函數。 這些函數應該以下划線為前綴。 在其中一個函數中,您可以實例化您的C ++類。

這與編寫動態庫時的方法相同,其優點是您可以根據需要在本機程序中重用庫。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM