intellij-idea - Rust 编译模式之间的区别

标签 intellij-idea compilation rust clion rust-cargo

关闭。这个问题需要debugging details .它目前不接受答案。












想改进这个问题?将问题更新为 on-topic对于堆栈溢出。

3年前关闭。




Improve this question




我是 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 配置,发现没有项目与构建模式有关。

    好的,这就是上下文,我的问题来了:
  • Intellij Run selected configuration 有什么区别?/Debug selected configuration默认为 Rust
  • 为什么选择 Intellij Debug/Run行为与 cargo --release 相反/cargo
  • 什么可能导致编译模式之间的不同行为,而我在 Rust 中没有依赖于模式的代码。(这里没有第三方 crate )
  • 最佳答案

    对于那些遇到类似问题的人,不仅在 Rust 中,而且在其他编程语言中,我找到了不同行为的原因:

    动态库乱七八糟

    我这样命名,不确定是否正确,但要描述同一动态库的多个版本位于您的计算机中,不同的路径可能会导致像我遇到的奇怪问题。

    如果您遇到这种情况,请使用 ldd检查库依赖项。

    此外,请记住清理所有缓存。

    关于intellij-idea - Rust 编译模式之间的区别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52827338/

    相关文章:

    php - 在 CentOS 上使用 PHP 5.4 安装 APC(主干)

    path - 如何在 g++ 中包含库的路径

    memory-management - 有没有一种方法可以在不将每个元素推送到字符串的情况下在使用它获取字符串的同时在空白处加入 BTreeSet?

    intellij-idea - 如何让 IntelliJ/PyCharm 能够正确识别 Python 命名空间的每个部分?

    javascript - Webstorm 远程调试 + 调试时编辑本地 javascript 文件

    intellij-idea - 如何在 IntelliJ 中创建真正的空项目?

    java - 在 Intellij 中为 Java 创建实时模板

    c - 如何在不接触源代码的情况下禁用 GNU C 编译器/GCC 警告?

    rust - 特征对象和特征的直接实现者的特征实现

    rust - 返回并使用匹配的通用类型