如何将OpenSSL与emscripten链接?

如何将OpenSSL与emscripten链接?,c,openssl,emscripten,webassembly,C,Openssl,Emscripten,Webassembly,我试图编译一些使用OpenSSL和emscripten的C代码,但我得到了未解析的符号警告,如: warning: unresolved symbol: SHA256_Init warning: unresolved symbol: SHA256_Final warning: unresolved symbol: SHA256_Update 我使用以下命令编译了代码: emcc SHA256.c -lssl -lcrypto -L /usr/local/openssl-1.0.2k/lib/

我试图编译一些使用OpenSSL和emscripten的C代码,但我得到了未解析的符号警告,如:

warning: unresolved symbol: SHA256_Init
warning: unresolved symbol: SHA256_Final
warning: unresolved symbol: SHA256_Update
我使用以下命令编译了代码:

emcc SHA256.c -lssl -lcrypto -L /usr/local/openssl-1.0.2k/lib/ -I /usr/local/openssl-1.0.2k/include -s WASM=1 -o SHA256.html --emrun
使用以下源代码

#include <stdio.h>
#include <string.h>
#include <stdlib.h>


#include <openssl/sha.h>
#include <openssl/hmac.h>
#include <openssl/evp.h>


void sha256(char *string, char outputBuffer[65])
{
    unsigned char hash[SHA256_DIGEST_LENGTH];
    SHA256_CTX sha256;
    SHA256_Init(&sha256);
    SHA256_Update(&sha256, string, strlen(string));
    SHA256_Final(hash, &sha256);
    int i = 0;
    for(i = 0; i < SHA256_DIGEST_LENGTH; i++)
    {
        sprintf(outputBuffer + (i * 2), "%02x", hash[i]);
    }
    outputBuffer[64] = 0;
}


int main (void)
{
    static unsigned char buffer[65];
    sha256("string", buffer);
    printf("%s\n", buffer);

    return 0;
}
#包括
#包括
#包括
#包括
#包括
#包括
void sha256(字符*字符串,字符输出缓冲区[65])
{
无符号字符哈希[SHA256_摘要_长度];
SHA256_CTX SHA256;
SHA256_Init(&SHA256);
SHA256_更新(&SHA256,string,strlen(string));
SHA256_Final(散列和SHA256);
int i=0;
对于(i=0;i
使用emscripten编译两个库:crypto和openssl,而不是使用系统版本


使用这些库生成的.bc文件作为em++命令的链接器参数,它应该可以工作。

请特别注意@mrduclaw的答案以及OpenSSL库在link命令中的位置。问题是您希望使用(-lssl-lcrypto)链接到系统ssl和加密库。这些在emscripten中不直接可用。您需要这些库的源代码,并使用emscripten编译它们,以便能够成功运行代码@jww这不是重复,而是对emscripten的误解works@Tarun-确认,谢谢,重新打开。很抱歉。请注意,
emcc SHA256.c-lssl-lcrypto…
看起来是错误的。使用传统编译器时,方程为
emccsha256.c-lssl-lcrypto
。图书馆排在最后,而不是第一位。这是因为
ld
是一个单通道链接器。@gemscript,你成功编译了你的代码吗?请分享。@gemscript如果你能够链接你的代码,我也面临同样的问题,即。