gpt4 book ai didi

javascript - Emscripten 在 Visual Studio 中导出函数异常

转载 作者:行者123 更新时间:2023-11-29 15:36:33 25 4
gpt4 key购买 nike

我刚刚开始使用 Emscripten,但在尝试导出函数以用于 JavaScript 时,我遇到了一些奇怪的事情。测试项目与 libsquish 有关,但它与问题无关,除了 header /代码文件名。

所以 - 无论如何,简单的测试。

c/c++

//squish.h
extern "C" int main();
int main();

extern "C" int gsr();
int gsr();

//squish.cpp
int main()
{
return 99;
}

int gsr()
{
//return squish::GetStorageRequirements(width,height,flags);
return 8675309;
}

附加选项/命令行

-s EXPORTED_FUNCTIONS="['_gsr','_main']" 

Javascript

main=Module.cwrap('main','number',null);
console.log(main());

GetStorageRequirements = Module.cwrap('gsr', 'number',null);
console.log(GetStorageRequirements());

Javascript 控制台(Chrome)

99
Assertion failed: Cannot call unknown function gsr (perhaps LLVM optimizations or closure removed it?)
Assertion failed: Cannot call unknown function gsr (perhaps LLVM optimizations or closure removed it?)

最重要的是,优化被禁用 (O0)。

那么,这里有什么交易?相同的返回类型,相同数量的参数,以完全相同的方式定义,唯一的区别是函数的名称。然而,一个有效,另一个是“未知”。

唯一可能的、合乎逻辑的原因是它自动导出 main,并一起忽略 EXPORTED_FUNCTIONS。但如果是这样的话,我不知道为什么。

最佳答案

感谢 Charles Ofria 在缩小问题范围方面所做的工作,唯一真正奇怪的是 Emscripten Visual Studio 插件。当我认为它可能只是自动导出 main 时,我走在了正确的轨道上——这是正确的。它没有导出其他函数的原因是因为我将它放在 Clang/C++ 部分的附加选项中,而不是 Emcc 链接器中。

问题是,这就是“奇怪”的地方,当您选择 Console Application (.js) 作为配置类型时,Emcc 链接器部分不会出现。因此,在将目标扩展更改为 .html 并将配置类型更改为 Browser Application (.html) 之后 - 链接器部分重新出现,我能够将EXPORTED_FUNCTIONS 选项,在正确的位置。

构建并复制输出后,两个函数都已定义,并在 Javascript 控制台中返回了正确的值。

关于javascript - Emscripten 在 Visual Studio 中导出函数异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27950115/

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