【问题标题】:Importing mysql gives many errors when running wasm-pack运行 wasm-pack 时导入 mysql 会出现很多错误
【发布时间】:2020-01-10 04:06:00
【问题描述】:

我对 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 新手,我不确定可能需要哪些其他信息来提供帮助。

编辑:我一直在用谷歌搜索这些错误,但没有运气。

【问题讨论】:

    标签: mysql rust webassembly


    【解决方案1】:

    这是一个很大的不同;通过这样做,您将添加从最高层到最低层:

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

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

    如果你决定向前推进,你会掉进一个非常非常深的兔子洞。如果你这样做,请在 cmets 中提及,我会给你指点。但是,在您这样做之前,请考虑以下事项:如果这是针对 wasm 工作人员,任何拥有该代码的人都将能够知道三元组(原型、主机、端口)来访问您将使用的 MySQL 服务器,以及与凭据。这也可能引发严重的基础架构问题,因为您不一定知道什么是可信客户端,什么不是。

    (我不会对你撒谎,这也会是大量的工作,而且大部分工作并不容易。例如,我不会这样做洞)

    【讨论】:

    • 你可能是对的。特别是考虑到这只是一个“我想学习 wasm”的项目。 (这永远不会发布。)好消息是这是学习体验的一部分!
    • FWIW 还有另一个问题,您需要在两者之间架起一座桥梁;这可能已经改变了,但上次我正确查看了 webassembly,唯一可用的通信方法是 webRTC、websockets 和 HTTP(S)。所以,你会更进一步。
    • 至于学习,真正的学习体验是旅程,而不是目的地:-)
    猜你喜欢
    • 1970-01-01
    • 2021-09-17
    • 2018-01-25
    • 2015-09-01
    • 2016-11-27
    • 2012-10-14
    • 1970-01-01
    • 2019-06-11
    • 1970-01-01
    相关资源
    最近更新 更多