我正在尝试创建一个带有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
- 废物包:0.8.1
- 柴油:1.4.0
- PostgreSQL:12
无法从WebAssembly链接到系统库。您必须使用纯Rust代码编写的实现才能使其工作。您还可以使用JavaScript库。但它总是必须在JavaScript运行时环境中。
libpq在postgreSQL安装二进制中可用
例如,PosgreSQL二进制下载站点如果打开zip分发postgresql-12.0-1-windows-x64-binaries.zip
,你可以看到这两个文件:
pgsqlliblibpq.dll
pgsqlliblibpq.lib
您需要指定LD_LIBRARY_PATH,或者您可以在编译器参数中指定-L来告诉将自动拾取这些文件的文件夹路径
如果你使用了安装程序,相同的文件应该在安装文件夹中
你也可以参考这个stackoverflow链接。我如何告诉Rust在哪里寻找静态库?
--编辑--
要在WebAssembly分发版中组合C库,我们可以使用本指南-
将现有的C模块编译为WebAssembly