Как связать приложение Rust Wasm с libpq через wasm-pack?

Я пытаюсь создать приложение NodeJS со слоем базы данных Wasm. Я использую Rust, Diesel в качестве драйвера базы данных иwasm-pack как компилятор WebAssembly.

Когда я пытаюсь построить свой сервис с wasm-pack, не удается связать libpqбиблиотека. ВPQ_LIB_DIR переменная окружения установлена, и diesel-cli работает без каких-либо проблем, но когда я пытаюсь скомпилировать свою службу, происходит сбой со следующей ошибкой:

error: linking with `rust-lld` failed: exit code: 1
  = note: rust-lld: error: unable to find library -llibpq

Как я могу это исправить?

Моя система:

  • ОС: Windows 10
  • Ржавчина: 1.38.0
  • wasm-pack: 0.8.1
  • дизель: 1.4.0
  • PostgreSQL: 12

2 ответа

Невозможно создать ссылку на системную библиотеку из WebAssembly. Вы должны использовать реализацию, написанную на чистом коде Rust, чтобы она работала. Вы также можете использовать библиотеку JavaScript. Но он всегда должен находиться внутри среды выполнения JavaScript.

Libpq доступен внутри установочного двоичного файла postgreSQL

Например, сайт загрузки двоичных файлов PosgreSQL, если открыть zip- архивpostgresql-12.0-1-windows-x64-binaries.zip вы можете увидеть эти 2 файла:

  • pgsql\lib\libpq.dll
  • pgsql\lib\libpq.lib

Вам нужно указать LD_LIBRARY_PATH, или вы можете указать -L в аргументах компилятора, чтобы указать путь к папке, который будет автоматически выбирать эти файлы

Если вы использовали установщик, тот же файл должен быть в папке установки.

Вы также можете сослаться на эту ссылку на stackru. Как сообщить Rust, где искать статическую библиотеку?

--РЕДАКТИРОВАТЬ--

Чтобы объединить библиотеку C в дистрибутив веб-сборки, мы можем использовать это руководство -
Компиляция существующего модуля C в WebAssembly

Другие вопросы по тегам