Возможно ли, что библиотека, созданная в visual studio, не может ссылаться на mingw g ?

#c #visual-studio #cmake #mingw

Вопрос:

Я создал статическую библиотеку в visual studio под названием myString. (ЦЕЛЬ ИСПЫТАНИЯ)

И пытаюсь связать с помощью инструмента cmake и установить компилятор mingw64.

Но, похоже, это не работает, Это показывает мне некоторую ошибку под названием «пропуск несовместимых при поиске библиотеки».

Неужели это невозможно связать с библиотекой, созданной другим компилятором?

Комментарии:

1. Разные компиляторы по-разному искажают имена.

2. Для достижения наилучших результатов свяжите библиотеки, созданные с помощью того же компилятора, что и ваша программа.

3. @ChrisMM Как по-другому задать имя компилятора?

4. Посмотрите на это по поводу искажения имени: https://en.wikipedia.org/wiki/Name_mangling#How_different_compilers_mangle_the_same_functions

Ответ №1:

Существует множество проблем при смешивании различных компиляторов, таких как:

  • Искажение имен (способ экспорта символов), особенно при использовании C
  • Разные компиляторы используют разные стандартные библиотеки, что может вызвать серьезные проблемы. Представьте , например, что память, выделенная с помощью GCC/MinGW malloc() , освобождается с помощью MSVC free() , что не будет работать.

Со статическими библиотеками это особенно сложно (например malloc() , может быть связано с неправильной стандартной библиотекой).

С помощью общих библиотек могут быть возможности решить эти проблемы и заставить его работать, по крайней мере, при использовании C. Для C это может быть намного сложнее.