运行wasm-pack时,导入mysql会产生许多错误

时间:2019-09-07 17:59:46

标签: mysql rust webassembly

我对rust和Web Assembly非常陌生,并且有一个简单的示例站点。到目前为止,这只是非常简单的东西,并且一切正常。接下来,我想了解有关连接到MySQL的信息。

在Cargo.toml中,我添加了:

    [dependencies]
    wasm-bindgen = "0.2.50"
    mysql = "*"

没有mysql部分,一切都可以正常编译。添加mysql="*"后,我会收到许多(317)错误。

一些错误样本:

[INFO]: Checking for the Wasm target...
[INFO]: Compiling to Wasm...
   Compiling net2 v0.2.33
   Compiling libc v0.2.62
error[E0432]: unresolved import `sys`
  --> /home/rich/.cargo/registry/src/github.com-1ecc6299db9ec823/net2-0.2.33/src
/tcp.rs:18:5
   |
18 | use sys::c;
   |     ^^^ maybe a missing `extern crate sys;`?

error[E0425]: cannot find value `timeout2ms` in this scope
    --> /home/rich/.cargo/registry/src/github.com-1ecc6299db9ec823/net2-0.2.33/src/ext.rs:1145:18
     |
1145 |             .map(timeout2ms)
     |                  ^^^^^^^^^^ not found in this scope

error[E0425]: cannot find value `SOL_SOCKET` in this scope
    --> /home/rich/.cargo/registry/src/github.com-1ecc6299db9ec823/net2-0.2.33/src/ext.rs:1149:33
     |
1149 |         set_opt(self.as_sock(), SOL_SOCKET, SO_SNDTIMEO,
     |                                 ^^^^^^^^^^ not found in this scope

error[E0425]: cannot find value `SO_SNDTIMEO` in this scope
    --> /home/rich/.cargo/registry/src/github.com-1ecc6299db9ec823/net2-0.2.33/src/ext.rs:1149:45
     |
1149 |         set_opt(self.as_sock(), SOL_SOCKET, SO_SNDTIMEO,
     |                                             ^^^^^^^^^^^ not found in this scope

到目前为止,我还没有添加任何代码来实际连接到数据库。我只是在尝试建立项目。 的区别是添加了mysql依赖项。

我正在使用有关MySQL的网站信息:mysql - Rust

鉴于我是Rust的新手,所以不确定是否需要其他信息来提供帮助。

编辑:我一直在搜寻许多此类错误,但没有运气。

1 个答案:

答案 0 :(得分:2)

那是一个很大的区别;这样,您就可以从最高层到最低层进行添加:

  • 处理mysql的库
  • 处理MySQL可以使用的各种压缩机制的库
  • 处理TLS的库
  • 用于处理套接字(您的错误来自哪里)的库

如果已知整个链都可以与wasm一起使用,那就很好了。问题是,不是。从该库的Cargo.toml文件可以看出,它“知道” Windows,macOS或linux作为目标。在您的情况下,wasm既不是这三者,因此它会尝试net2进行网络连接,这取决于libc,这需要所有突然丢失的符号。

如果您决定将其推进,则您将钻入一个非常非常深的兔子洞。如果您愿意,请在评论中提及,我会为您提供指导。但是,在执行此操作之前,请考虑以下事项:如果这是给wasm工作者使用的,那么拥有代码的任何人都将能够知道三元组(原型,主机,端口),以访问将要使用的MySQL服务器,以及凭据。这可能还会引发严重的基础架构问题,因为您不一定知道什么是受信任的客户端,什么不是。

(我不会骗你,这也将是很多的工作,而且大多数工作都不容易。例如,我不会拒绝孔)