使用CMake as.a构建的静态库,使用Emscripten而不是.wasm+。js TL;博士
如何配置CMake和Emscripten来构建静态库以生成WASM和JS引导文件使用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引导)。只需使用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的工具链的怪癖——但它可以很好地工作并与项目的其余部分隔离开来。