首页 文章

Rust编译模式之间的区别[关闭]

提问于
浏览
1

我是Rust的新手 .

我曾经在Jetbrains IDE中编写了很多代码(当然还有Ideavim),我决定为Rust选择一个Jetbrains IDE,更具体地说是CLion(因为我有时候也要写C) . 如果您不熟悉它,可以在这里处理像Intellij或Pycharm / Rubymine / Android-studio这样的CLion,因为毕竟真正的工作是由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 --releaseRun 表现得像 cargo (没有 --release ),不知道为什么 .

你可能会怀疑那是因为我写了一些构建类型依赖代码,但至少在Rust部分不是这样 . 至于C库,它已经被编译,我不认为不同的Rust编译类型会改变它内部的东西 .

我检查了CLion中的Rust配置,发现构建模式没有项目问题 .

好的,那是上下文,这是我的问题:

  • 默认情况下,Intellij Run selected configuration / Debug selected configuration 之间的区别是什么

  • 为什么Intellij Debug / Run 的行为与 cargo --release / cargo 相反

  • 什么可能导致编译模式之间的不同行为,而我在Rust中没有依赖于模式的代码 . (此处没有第三方包装箱)

1 回答

  • 1

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

    Dynamic library mess

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

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

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

相关问题