gpt4 book ai didi

cmake - 使用 CMake 作为 .a 使用 Emscripten 而不是 .wasm + .js 构建的静态库

转载 作者:行者123 更新时间:2023-12-05 03:50:07 29 4
gpt4 key购买 nike

长话短说

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


我有一个正在使用 CMake 构建的静态库,我想使用 Emscripten 将其构建为 WASM 库(和 JS Bootstrap )。简单地使用 Emscripten CMake 工具链并添加适当的编译器/链接器标志只会导致 .a正在构建文件 - 即使 -o <project name>.js被添加到编译器和/或链接器标志。

原因是因为我告诉 CMake 我想要一个静态库,它使用 CMAKE_AR build 。 CMAKE_AR (如果未定义)定义为 emar在 Emscripten 工具链文件中,和 emar无法生产 .wasm.js输出。

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

system_libs:WARNING: main() is in the input files, but "_main" is not in EXPORTED_FUNCTIONS, which means it may be eliminated as dead code. Export it if you want main() to run.

我可以通过向 exe 源文件列表添加一个空文件来绕过(可能,我还没有尝试过),但这感觉很像 hack。

最佳答案

您是正确的,因为您需要创建一个可执行目标才能生成 .wasm 文件。

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

参见 CMake: Is it possible to build an executable from only static libraries and no source?了解如何解决 cmake 的这一限制。

关于cmake - 使用 CMake 作为 .a 使用 Emscripten 而不是 .wasm + .js 构建的静态库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63622009/

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