我应该使用哪个版本的gcc正确构建rustlearn板条箱?

时间:2019-05-06 21:53:20

标签: windows rust

我正在尝试在项目中使用rustlearn条板箱。在Cargo.toml中添加了依赖项。 由于rustlearn需要gcc,因此我下载并安装了MinGW64。 我尝试了以下gcc构建:

  • x86_64-8.1.0-posix-seh-rt_v6-rev0
  • x86_64-8.1.0-posix-sjlj-rt_v6-rev0
  • i686-8.1.0-posix-sjlj-rt_v6-rev0

每次将PATH环境变量设置为适当的g++.exe并重新启动VSCode。 但是每次我尝试构建Rust软件包时,都会出现这样的错误:

 = note: C:\Rust\PF\machinelearning\target\debug\deps\librustlearn-4ae611e3fd449ac0.rlib(svm.o): In function `ZN6KernelC2EiPKP8svm_nodeRK13svm_parameter':
          C:\Git-local-repos\rustlearn/dependencies/libsvm/svm.cpp:256: undefined reference to `__gxx_personality_sj0'
          C:\Git-local-repos\rustlearn/dependencies/libsvm/svm.cpp:256: undefined reference to `_Unwind_SjLj_Register'
          C:\Git-local-repos\rustlearn/dependencies/libsvm/svm.cpp:258: undefined reference to `_Unwind_SjLj_Resume'
          C:\Git-local-repos\rustlearn/dependencies/libsvm/svm.cpp:289: undefined reference to `_Unwind_SjLj_Unregister'

多次。 我意识到问题出在某种程度上与异常处理(seh / sjlj)有关。 我的系统是Windows 7 x86-64,防锈工具链是stable-i686-pc-windows-gnu。

我在做什么错了?

2 个答案:

答案 0 :(得分:0)

我创建MWE时没有遇到这些错误。

在我看来,这似乎是您尝试使用gcc链接由g++编译的* .o。

我无法复制您的问题。这就是我所做的-结果成功构建了一个项目:

  1. 我使用cargo new创建了一个新项目,并将以下内容添加到Cargo.toml
rustlearn = "0.5.0"
  1. 我运行了cargo check以下载所有必需的依赖项。

  2. 我编辑了src/main.rs,以包含来自here的逻辑回归示例,并对其进行了修改,以便在main()函数中对其进行调用。

  3. 我运行了cargo build,它成功编译了crossbeamlibcserderandrustlearn和{{ 1}}-我的测试包的名称。输出了几次棉绒警告;他们被忽略了。

  4. 我运行了rustlearn-test,它成功运行了该程序。

FWIW,我正在Windows 10上使用WSL。

答案 1 :(得分:0)

我发现MinGW的正确版本是i686-7.1.0-posix-dwarf-rt_v5-rev2。