2017-08-31 3 views
1

私はemscriptenでOpenSSLを使用して、いくつかのCコードをコンパイルしようとしているが、私はのような未解決のシンボルの警告を得る:私は、このコマンドを使用してコードをコンパイルOpenSSLとemscriptenをリンクするには?

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; 
} 
+0

@ mrduclawの答えと、OpenSSLライブラリがlinkコマンドのどこにあるかに特に注意してください。 – jww

+0

問題は、(-lssl -lcrypto)を使用してシステムsslおよび暗号化ライブラリにリンクする予定があることです。 emscriptenでは直接利用できません。これらのライブラリのソースコードが必要で、emscriptenでコンパイルしてコードを正常に実行できるようにする必要があります。 @jwwこれは複製ではなく、emscriptenの動作を誤解しています –

+0

@Tarun - Ack、ありがとう、再開。申し訳ありません。記録のために、 'emcc SHA256.c -lssl -lcrypto ...'は間違っています。従来のコンパイラを使用する場合、式は 'emcc SHA256.c ... -lssl -lcrypto'です。図書館は一番最後ではなく、最後に来ます。これは 'ld'がシングルパスリンカーであるからです。 – jww

答えて

0

システムバージョンを使用するのではなく、cryptoとemscriptenでopensslをコンパイルします。

これらのライブラリに生成された.bcファイルをem ++コマンドのリンカ引数として使用すると、動作するはずです。

関連する問題