[英]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文件中包含哪些函數。 我嘗試了各種不同的東西:
使用重整名稱,據我了解這個名字應該是“_multi_d10HelloWorldd”。 我也嘗試過沒有classname和其他一些組合。
emcc -s HelloWorld.cpp -s EXPORTED_FUNCTIONS='["_multi_d10HelloWorldd"]'
使用修飾符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.