#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()
, освобождается с помощью MSVCfree()
, что не будет работать.
Со статическими библиотеками это особенно сложно (например malloc()
, может быть связано с неправильной стандартной библиотекой).
С помощью общих библиотек могут быть возможности решить эти проблемы и заставить его работать, по крайней мере, при использовании C. Для C это может быть намного сложнее.