我是Rust的新手。
由于我过去经常在Jetbrains IDE(当然是使用Ideavim)中编写代码,所以我决定也为Rust选用Jetbrains IDE,更具体地说是CLion(因为有时我也不得不编写C ++)。如果您不熟悉CLion,可以在这里将其视为Intellij或Pycharm / Rubymine / Android-studio,因为毕竟真正起作用的是由LLDB支持的Rust插件。
今天我遇到了一件很奇怪的事情:
我用C语言编写了一个库,该库在C ++项目中运行良好。在我的新Rust项目中,我想继续使用它作为动态库。它可以很好地编译,但是行为却很奇怪,例如,有时到std的日志记录不起作用,文件操作不起作用,等等。
经过更多调查后,我发现我的测试用例将:
Run selected configuration
运行,则失败cargo test -- --nocapture
运行会失败cargo test --release -- --nocapture
运行,则通过Debug selected configuration
此处Intellij Debug
的行为类似于cargo --release
,Run
的行为类似于cargo
(没有--release
),不知道为什么。
您可能会怀疑这是因为我写了一些依赖于构建类型的代码,但至少在Rust部分不是这样。至于C库,它已经被编译了,我认为不同的rust编译类型不会改变其中的内容。
我检查了CLion中的Rust配置,发现没有任何与构建模式有关的项目。
好的,这就是上下文,这是我的问题:
Run selected configuration
/ Debug selected configuration
有什么区别Debug
/ Run
的行为与cargo --release
/ cargo
相反答案 0 :(得分:0)
对于那些遇到类似问题的人,不仅在Rust中,而且在其他编程语言中,我都发现了不同行为的原因:
动态库混乱
我是这样命名的,不确定它是否正确,但是要描述同一动态库的多个版本位于您的计算机中,而不同的路径可能会引起类似我遇到的奇怪问题。
如果遇到这种情况,请使用ldd
检查库的相关性。
另外,请记住清理所有缓存。