Emscripten compilation error: "'openssl/sha.h' file not found"
Emscripten compilation error: "'openssl/sha.h' file not found"
我有一个名为“speed.c”的文件,我希望将其用于 Web 程序
这个有效:
gcc speed.c -lcrypto -lssl
但这不是:
emcc speed.c -v -lcrypto -lssl -s EXPORTED_FUNCTIONS=_speed,_main -o speed.wasm
speed.c中的函数叫做“speed”。
在 Emscripten 的网站上,它说编译器和其他编译器一样,所以这个让我很困惑。
有什么帮助吗?谢谢!
Emscripten 无法使用您系统的库。这是因为它们是为您自己的机器(可能是 64 位 linux)编译的二进制文件,而 emcc
编译为 WebAssembly/JavaScript。您通常可以通过 file
:
查看二进制文件的目标架构
$ file `realpath /usr/lib/libssl.so`
因此,您需要先使用 emcc
编译 OpenSSL。我自己没有这样做过,但我相信这是可能的。您可以查看 this github issue。
完成后,您应该有两个文件名称 libssl.a
和 libcrypto.a
。然后你可以像这样编译你自己的项目:
$ SSL=/path/to/openssl
$ emcc speed.c $SSL/libssl.a $SSL/libcrypto.a -I $SSL/include/ # etc.
看看 project building page 如果你还没有。
我有一个名为“speed.c”的文件,我希望将其用于 Web 程序
这个有效:
gcc speed.c -lcrypto -lssl
但这不是:
emcc speed.c -v -lcrypto -lssl -s EXPORTED_FUNCTIONS=_speed,_main -o speed.wasm
speed.c中的函数叫做“speed”。 在 Emscripten 的网站上,它说编译器和其他编译器一样,所以这个让我很困惑。 有什么帮助吗?谢谢!
Emscripten 无法使用您系统的库。这是因为它们是为您自己的机器(可能是 64 位 linux)编译的二进制文件,而 emcc
编译为 WebAssembly/JavaScript。您通常可以通过 file
:
$ file `realpath /usr/lib/libssl.so`
因此,您需要先使用 emcc
编译 OpenSSL。我自己没有这样做过,但我相信这是可能的。您可以查看 this github issue。
完成后,您应该有两个文件名称 libssl.a
和 libcrypto.a
。然后你可以像这样编译你自己的项目:
$ SSL=/path/to/openssl
$ emcc speed.c $SSL/libssl.a $SSL/libcrypto.a -I $SSL/include/ # etc.
看看 project building page 如果你还没有。