intellij-idea - Rust 编译模式之间的区别
问题描述
我是 Rust 的新手。
由于我过去在 Jetbrains IDE 中编写了很多代码(当然是使用 Ideavim),所以我决定也为 Rust 选择一个 Jetbrains IDE,更具体地说是 CLion(因为我有时也必须编写 C++)。在这里,如果您不熟悉 CLion,您可以将其视为 Intellij 或 Pycharm/Rubymine/Android-studio,因为毕竟真正起作用的是由 LLDB 提供支持的 Rust 插件。
今天遇到了一件很奇怪的事情:
我用 C 编写了一个库,它在 C++ 项目中运行良好。在我的新 Rust 项目中,我想继续使用它,作为一个动态库。它编译得很好,但它的行为很奇怪,比如,有时记录到 std 不起作用,文件操作不起作用,等等。
经过更多调查,我发现我的测试用例将:
- 如果我通过 CLion/Intellij 运行失败
Run selected configuration
- 如果我通过 CLI 运行失败
cargo test -- --nocapture
- 如果我通过 CLI 运行则通过
cargo test --release -- --nocapture
- 如果我通过 CLion/Intellij 运行则通过
Debug selected configuration
这里 Intellij 的Debug
行为像cargo --release
,Run
行为像cargo
(没有--release
),不知道为什么。
你可能会怀疑那是因为我写了一些依赖于构建类型的代码,但至少在 Rust 部分不是这样。至于 C 库,它已经编译好了,我不认为不同的 rust 编译类型会改变它里面的东西。
我检查了 CLion 中的 Rust 配置,发现没有项目与构建模式有关。
好的,这就是上下文,我的问题来了:
Run selected configuration
Intellij /Debug selected configuration
for Rust 默认有什么区别- 为什么 Intellij
Debug
/Run
行为与cargo --release
/cargo
- 什么可能导致编译模式之间的不同行为,而我在 Rust 中没有依赖于模式的代码。(这里没有第三方板条箱)
解决方案
对于那些遇到类似问题的人,不仅在 Rust 中,而且在其他编程语言中,我找到了不同行为的原因:
动态库乱七八糟
我这样命名,不确定是否正确,但要描述同一动态库的多个版本位于您的计算机中,不同的路径可能会导致像我遇到的奇怪问题。
如果您处于这种情况,请使用ldd
检查库依赖项。
此外,请记住清理所有缓存。
推荐阅读
- javascript - 如何比较来自更改事件的值
- ios - 滑动 ViewController 以关闭 - 顶部的错误
- asp.net - 为什么数据库没有变化
- dialogflow-es - 有没有办法动态激活对话流意图?
- django - Django:添加外键字段后迁移时出现 IntegrityError
- python - 如何处理 Python 日志中的常规消息?
- python - 将缺失的记录插入到由日期列表管理的对象数组中
- css - flexbox - 减少垂直间距
- html - 可滚动的弹性项目 - 如何让宽度等于内容
- typescript - Typescript 使用派生类作为方法的返回类型