Какую сборку gcc я должен использовать для правильной сборки ящика с ржавчиной? - PullRequest
0 голосов
/ 07 мая 2019

Я пытаюсь использовать 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, набор инструментов ржавчины - стабильный-i686-pc-windows-gnu.

Что я делаю не так?

Ответы [ 2 ]

0 голосов
/ 09 мая 2019

Я обнаружил, что правильной сборкой MinGW является i686-7.1.0-posix-dwarf-rt_v5-rev2.

0 голосов
/ 08 мая 2019

Я не сталкивался с этими ошибками при создании MWE.

Мне кажется, вы пытаетесь использовать gcc для связи * .o, скомпилированного с g++.

Мне не удалось воспроизвести вашу проблему.Вот что я сделал - в результате был успешно построен проект:

  1. Я создал новый проект с cargo new и добавил следующее к Cargo.toml:
rustlearn = "0.5.0"

Я запустил cargo check, чтобы загрузить все необходимые зависимости.

Я отредактировал src/main.rs, чтобы включить пример логистической регрессии из здесь , модифицированный так, чтобы он вызывался в функции main().

Я запустил cargo build, который успешно скомпилировал crossbeam, libc, serde, rand, rustlearn и rustlearn-test - имя моего тестового пакета.Было выпущено несколько предупреждений о перерывах;они были проигнорированы.

Я запустил cargo run, который успешно запустил программу.

FWIW, я использую WSL в Windows10.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...