openmp - 将 OpenMP 编译为 WebAssembly
问题描述
我正在尝试将多线程应用程序编译为 WebAssembly。该应用程序使用 OpenMP 进行多线程处理。要编译,我使用的是 Emscripten 框架。
我已经下载了 OpenMP 的源文件并使用 make 为我的主机编译了它。使用以下命令,我可以让它与我机器上的一个简单演示应用程序链接:
g++ -Wall -Werror -pedantic main.o -o main.x /$PATH_TO_OPENMP/build/runtime/src/libgomp.a -pthread -lstdc++ -Wl,--no-as-needed -ldl
然后我尝试将 OpenMP 编译为 Emscripten 使用的 llvm 字节码格式。为此,我尝试运行“emmake make”,以便 emscripten 框架使用合适的编译器执行 OpenMP makefile。由于 emscripten 不喜欢共享对象文件,我将其编译为静态库 .a 文件。这有效,实际上给了我可以链接到的目标文件。
然后我想用以下命令链接我的演示应用程序
em++ -Wall -Werror -pedantic main.o -o main.html /home/main/data/Programming/openMP/openmp_web/build/runtime/src/libgomp.a -pthread -lstdc++ -Wl,--no-as-needed -ldl
但我收到这些警告,它无法链接到 OpenMP 文件:
shared:WARNING: object /tmp/emscripten_temp_ONa0eU_archive_contents/kmp_atomic.cpp.o is not a valid object file for emscripten, cannot link
.
.
shared:WARNING: object /tmp/emscripten_temp_ONa0eU_archive_contents/kmp_str.cpp.o is not a valid object file for emscripten, cannot link
shared:WARNING: object /tmp/emscripten_temp_ONa0eU_archive_contents
所以我想我一定是用错误的编译器编译了 OpenMP。然后,我尝试使用以下命令在构建库时更改编译器:
cmake -DCMAKE_C_COMPILER=emcc -DCMAKE_CXX_COMPILER=em++ -DLIBOMP_LIB_TYPE=normal -DLIBOMP_ENABLE_SHARED=OFF -DCMAKE_BUILD_TYPE=Release -DLIBOMP_ARCH=x86_64 OPENMP_STANDALONE_BUILD=1 ..
emmake make
但这只会在一些缺失的系统变量上给出奇怪的错误
/home/main/data/Programming/openMP/openmp_web/runtime/src/kmp_platform.h:82:2: error: Unknown OS
/home/main/data/Programming/openMP/openmp_web/runtime/src/kmp_platform.h:203:2: error: Unknown or unsupported architecture
In file included from /home/main/data/Programming/openMP/openmp_web/runtime/src/kmp_alloc.cpp:13:
In file included from /home/main/data/Programming/openMP/openmp_web/runtime/src/kmp.h:77:
/home/main/data/Programming/openMP/openmp_web/runtime/src/kmp_os.h:171:2: error: "Can't determine size_t printf format specifier."
有没有人知道我可以做些什么不同的事情?
解决方案
推荐阅读
- python - 无法使用 Selenium(Python)按类名找到 div
- mysql - 卸载 XAMPP 后从本地 phpMyAdmin 恢复数据库
- flutter - Flutter:应用程序终止时,flutter_local_notifications onSelectNotification 不起作用
- python - 如何在正则表达式(Python)中为变量添加单词边界
- javascript - 如何使用 jquery 在 onclick 中附加 jsx const
- python - 从存储为字符串的文件路径中获取文件名
- php - 我一直有 Uncaught TypeError: mysqli_error(): Argument #1 ($mysql) must be of type mysqli, bool given
- swift - SwiftUI 按钮不会在 iPhone Xs 上的 ScrollView(不可点击)中触发动作,适用于 iPhone 7 和模拟器
- php - 从结果wordpress中读取数组对象内的JSON
- web-services - 是否可以将 SMS 作为 Web 服务的输入/输出?