Emscripten 编译错误:“'openssl/sha.h' 文件未找到”

Posted

技术标签:

【中文标题】Emscripten 编译错误:“\'openssl/sha.h\' 文件未找到”【英文标题】:Emscripten compilation error: "'openssl/sha.h' file not found"Emscripten 编译错误:“'openssl/sha.h' 文件未找到” 【发布时间】:2021-05-18 20:35:06 【问题描述】:

我有一个名为“speed.c”的文件,我希望将其用于网络程序

这行得通:

 gcc speed.c -lcrypto -lssl

但这不是:

emcc speed.c -v -lcrypto -lssl -s EXPORTED_FUNCTIONS=_speed,_main -o speed.wasm

speed.c 中的函数称为“speed”。 在 Emscripten 的网站上,它说编译器和其他编译器一样,所以这个让我很困惑。 有什么帮助吗?谢谢!

【问题讨论】:

【参考方案1】:

Emscripten 无法使用您系统的库。这是因为它们是为您自己的机器(可能是 64 位 linux)编译的二进制文件,而 emcc 编译为 WebAssembly/javascript。您通常可以通过file 看到二进制文件所针对的架构:

$ file `realpath /usr/lib/libssl.so`

因此,您需要首先使用emcc 编译 OpenSSL。我自己没有这样做,但我相信这是可能的。您可以查看this github issue。 完成后,您应该有两个文件名libssl.alibcrypto.a。然后你可以像这样编译你自己的项目:

$ SSL=/path/to/openssl
$ emcc speed.c $SSL/libssl.a $SSL/libcrypto.a -I $SSL/include/  # etc.

如果您还没有,请查看project building page。

【讨论】:

以上是关于Emscripten 编译错误:“'openssl/sha.h' 文件未找到”的主要内容,如果未能解决你的问题,请参考以下文章

Emscripten 交叉编译的 CPython 中出现奇怪的导入错误

为啥 emscripten 不编译我的函数?

Emscripten:我如何编译带有像 immintrin.h 这样的内在头文件的 c 文件?

错误:未定义符号:gzclose opencv emscripten

将 emscripten 与 opengl 着色器一起使用

Emscripten:致命错误:找不到“tr1/unordered_map”文件