我是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 --release
, Run
表现得像 cargo
(没有 --release
),不知道为什么 .
你可能会怀疑那是因为我写了一些构建类型依赖代码,但至少在Rust部分不是这样 . 至于C库,它已经被编译,我不认为不同的Rust编译类型会改变它内部的东西 .
我检查了CLion中的Rust配置,发现构建模式没有项目问题 .
好的,那是上下文,这是我的问题:
-
默认情况下,Intellij
Run selected configuration
/Debug selected configuration
之间的区别是什么 -
为什么Intellij
Debug
/Run
的行为与cargo --release
/cargo
相反 -
什么可能导致编译模式之间的不同行为,而我在Rust中没有依赖于模式的代码 . (此处没有第三方包装箱)
1 回答
对于那些遇到类似问题的人,不仅在Rust中,还有其他编程语言,我找到了不同行为的原因:
Dynamic library mess
我这样命名,不确定它是否正确,但是为了描述同一动态库的多个版本位于您的计算机中,不同的路径可能会导致我遇到的奇怪问题 .
如果您遇到这种情况,请使用
ldd
检查库依赖项 .此外,请记住清理所有缓存 .