Перелинковка внешней библиотеки при смене компилятора в Qt

Я знаю, что эту ошибку много раз исправляли, но до сих пор я не мог решить ее для своего проекта. Я делаю приложение Qt и хочу скомпилировать его с помощью компилятора MSVC вместо MinGW (здесь является причиной).

Когда я построил программу, я получаю множество ошибок такого рода (просто отрывок):

error: LNK2019: unresolved external symbol sdot_ referenced in function "double __cdecl arma::blas::dot<double>(unsigned int,double const *,double const *)" (??$dot@N@blas@arma@@YANIPEBN0@Z)
error: LNK2019: unresolved external symbol sgemv_ referenced in function "void __cdecl arma::blas::gemv<double>(char const *,int const *,int const *,double const *,double const *,int const *,double const *,int const *,double const *,double *,int const *)" (??$gemv@N@blas@arma@@YAXPEBDPEBH1PEBN21212PEAN1@Z)

и это предупреждение: LNK4272: library machine type 'x86' conflicts with target machine type 'x64'.

Этот поток предлагает запустить qmake и пересобрал проект, но это ничего не изменило.

Из здесь и здесь и, как следует из предупреждения, я решил, что должен изменить цель машина для компоновщика. Однако все, что я нашел, объяснило это в Visual Studio. Как мне это сделать в Qt Creator?

Буду очень благодарен за любые подсказки.

EDIT: Итак, моя программа использует библиотеку броненосца, и это является причиной проблем. Когда я меняю компиляторы, мне нужно скомпилировать или слинковать эту библиотеку по-новому (верно?). В этом сообщении в блоге проблема в 2-х пунктах (второй пункт является причиной ошибок):

  1. MSVC не может напрямую ссылаться на dll -> нам нужна так называемая «библиотека импорта».

  2. Видимость символов: GCC/MinGW по умолчанию экспортирует все символы, MSVC по умолчанию не экспортирует символы.

Поэтому при использовании MSVC мне нужно связать библиотеку импорта (.lib) вместо .dll в случае MinGW. Как я могу сделать это в QtCreator?

Это мой первый опыт работы с компиляторами и компоновщиками, поэтому я открыт для исправлений, предложений и решений!


person Mariam    schedule 22.08.2018    source источник
comment
Это ошибка компоновки, но наиболее вероятной причиной является тот факт, что одна библиотека скомпилирована для MinGW. Вы установили правильный qt MSVC и перекомпилировали arma?   -  person Dragos Pop    schedule 22.08.2018
comment
@DragosPop извините, а что такое арма? а что определяет MSVC как правильный? MSVC успешно компилирует другие проекты qt. если это означает, что это правильно, то да, это так.   -  person Mariam    schedule 22.08.2018
comment
Я вижу, что вы используете библиотеку в сообщении об ошибке arma::blas::... Я сделал быстрый поиск и нашел его в Интернете. Не знаю, как вы его используете, но поищите свои включения и настройки компоновщика.   -  person Dragos Pop    schedule 22.08.2018
comment
Я нашел это здесь: arma.sourceforge.net/docs.html, возможно, вы используют его не прямо, а косвенно. Например, его использует mlpack. В любом случае это кажется низкоуровневой матовой библиотекой, поэтому, если вы используете библиотеку, которая может выполнять множество вычислений, это может зависеть от этого Armadillo или от того, как он называется.   -  person Dragos Pop    schedule 22.08.2018
comment
да, на самом деле я строю проект, который был начат кем-то другим, и он использует библиотеку для некоторых вычислений (только сейчас узнал). Так что я подозреваю, что эта библиотека сделана для конкретной версии компилятора или что-то в этом роде, и поэтому она не работает с новым компилятором? @DragosPop   -  person Mariam    schedule 22.08.2018
comment
Нет, он скомпилирован для этого конкретного компилятора. Вам просто нужно скомпилировать его снова для Visual Studio. Однако это может быть не так просто, вам нужно настроить систему сборки для компиляции в Visual Studio. Однако, судя по документации, VS поддерживается: arma.sourceforge.net/download.html читать часть Windows.   -  person Dragos Pop    schedule 22.08.2018
comment
Похоже, что у него также есть файл CMake, это означает, что его должно быть достаточно легко открыть в QtCreator и собрать для целевой визуальной студии. Не знаю точно, как, так как я некоторое время не использовал QtCreator   -  person Dragos Pop    schedule 22.08.2018
comment
@DragosPop спасибо, да, теперь я определенно лучше понял проблему. Осталось узнать как решить!   -  person Mariam    schedule 22.08.2018