Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/cmake/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用CMake as.a构建的静态库,使用Emscripten而不是.wasm+。js TL;博士_Cmake_Webassembly_Emscripten - Fatal编程技术网

使用CMake as.a构建的静态库,使用Emscripten而不是.wasm+。js TL;博士

使用CMake as.a构建的静态库,使用Emscripten而不是.wasm+。js TL;博士,cmake,webassembly,emscripten,Cmake,Webassembly,Emscripten,如何配置CMake和Emscripten来构建静态库以生成WASM和JS引导文件 我有一个使用CMake构建的静态库,我想使用Emscripten将其构建为WASM库(和JS引导)。只需使用Emscripten CMake工具链并添加适当的编译器/链接器标志,只会生成一个.a文件,即使-o.js已添加到编译器和/或链接器标志中 原因是因为我告诉CMake我想要一个静态库,所以它使用CMake_AR来构建CMAKE_AR(如果未定义)在Emscripten工具链文件中定义为emar,并且emar

如何配置CMake和Emscripten来构建静态库以生成WASM和JS引导文件


我有一个使用CMake构建的静态库,我想使用Emscripten将其构建为WASM库(和JS引导)。只需使用Emscripten CMake工具链并添加适当的编译器/链接器标志,只会生成一个
.a
文件,即使
-o.js
已添加到编译器和/或链接器标志中

原因是因为我告诉CMake我想要一个静态库,所以它使用
CMake_AR
来构建
CMAKE_AR
(如果未定义)在Emscripten工具链文件中定义为
emar
,并且
emar
无法生成
.wasm
.js
输出

我尝试创建一个新的可执行目标,该目标依赖于库,否则只需设置编译器/链接器设置。但是,这会导致CMake错误,因为我定义了一个没有源文件的可执行目标(它们与库目标关联)。如果我添加存根主文件,我会收到一个Emscripten警告:

system_libs:警告:main()位于输入文件中,但“_main”不在导出的_函数中,这意味着它可能会作为死代码被删除。如果要运行main(),请将其导出


我可以通过向exe源文件列表中添加一个空文件(可能我还没有尝试过),但这感觉很像是一次黑客攻击。

您是正确的,您需要创建一个可执行目标以生成
.wasm
文件

如果cmake坚持要创建一个虚拟源文件,因为它不理解程序的所有代码都可以来自库,那么我想这是最好的选择


请参阅以了解如何绕过cmake的这个限制。

这就是我所做的,谢天谢地,我不必创建一个空的源文件,因为我可以直接引用我用来托管WASM库的自定义
index.html
。这让人感觉不太满意,因为CMakeLists.txt非常容易产生误解,除非您知道Emscripten的工具链的怪癖——但它可以很好地工作并与项目的其余部分隔离开来。