如何通过wasm-pack将Rust Wasm应用程序与libpq链接​​?

时间:2019-11-03 14:22:40

标签: rust webassembly rust-diesel wasm-bindgen wasm-pack

我正在尝试创建一个具有Wasm数据库层的NodeJS应用程序。我将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 个答案:

答案 0 :(得分:1)

不可能从WebAssembly链接到系统库。您必须使用用纯Rust代码编写的实现来使其工作。您还可以使用JavaScript库。但是它必须始终在JavaScript运行时环境中。

答案 1 :(得分:0)

libpq在postgreSQL安装二进制文件中可用

例如,PosgreSQL Binary Download Site如果打开zip发行版postgresql-12.0-1-windows-x64-binaries.zip,则可以看到以下两个文件:

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

您需要指定LD_LIBRARY_PATH,也可以在编译器参数中指定-L来告诉文件夹路径,该路径将自动选择那些文件

如果您使用了安装程序,则安装文件夹中应该有相同的文件

您还可以引用此stackoverflow链接How to I tell Rust where to look for a static library?

-编辑-

要将C库合并到Web汇编发行版中,我们可以使用本指南-
Compiling an Existing C Module to WebAssembly