Ошибка компиляции Emscripten: «файл’openssl/sha.h’ не найден»

#c #gcc #compiler-errors #emscripten #emcc

Вопрос:

У меня есть файл под названием «speed.c», который я хочу использовать для веб-программы

Это работает:

  gcc speed.c -lcrypto -lssl
 

Но это не так:

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

Функция в speed.c называется «скорость».
На веб-сайте Emscripten говорится, что компилятор такой же, как и любой другой, поэтому этот меня смущает.
Какая-нибудь помощь? Спасибо!

Ответ №1:

Emscripten не может использовать библиотеки вашей системы. Это связано с тем, что они являются двоичными файлами, скомпилированными для вашей собственной машины (вероятно, 64-разрядной Linux), в то время emcc как компилируются в WebAssembly/JavaScript. Как правило, вы можете видеть, на какую архитектуру нацелен двоичный файл file :

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

Таким образом, вам нужно будет сначала скомпилировать OpenSSL с emcc помощью . Я сам этого не делал, но я верю, что это возможно. Вы могли бы проверить эту проблему на github.
Как только вы это сделаете, у вас должно быть два имени файлов libssl.a и libcrypto.a . Затем вы можете скомпилировать свой собственный проект следующим образом:

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

Взгляните на страницу создания проекта, если вы еще этого не сделали.