Russian Qt Forum
Ноябрь 23, 2024, 21:21
Добро пожаловать,
Гость
. Пожалуйста,
войдите
или
зарегистрируйтесь
.
Вам не пришло
письмо с кодом активации?
1 час
1 день
1 неделя
1 месяц
Навсегда
Войти
Начало
Форум
WIKI (Вики)
FAQ
Помощь
Поиск
Войти
Регистрация
Russian Qt Forum
>
Forum
>
Qt
>
Установка, сборка, отладка, тестирование
>
проблемы с компиляцией программы
Страниц: [
1
]
2
Вниз
« предыдущая тема
следующая тема »
Печать
Автор
Тема: проблемы с компиляцией программы (Прочитано 12870 раз)
alex
Гость
проблемы с компиляцией программы
«
:
Декабрь 28, 2012, 11:46 »
Значит скомпилировал бибилотеку Qt с MSVS. а при попытке скомпилировать в ней проект с помощью MinGW получил ошибку.Почему нельзя использовать разные компиляторы?
Записан
Fregloin
Супер
Offline
Сообщений: 1025
Re: проблемы с компиляцией программы
«
Ответ #1 :
Декабрь 28, 2012, 12:25 »
Потому что разные компиляторы по разному компилируют ...
Записан
Alex Custov
Джедай : наставник для всех
Offline
Сообщений: 2063
Re: проблемы с компиляцией программы
«
Ответ #2 :
Декабрь 28, 2012, 14:32 »
Цитата: alex от Декабрь 28, 2012, 11:46
Значит скомпилировал бибилотеку Qt с MSVS. а при попытке скомпилировать в ней проект с помощью MinGW получил ошибку.Почему нельзя использовать разные компиляторы?
Потому что нужно писать стандартный код.
Записан
Bepec
Гость
Re: проблемы с компиляцией программы
«
Ответ #3 :
Декабрь 28, 2012, 14:34 »
Компиляторы должны придерживаться стандарта языка.
Компиляторы аля MinGW позволяют отступать от стандарта.
Это конечно удобнее, например массивы динамической длины. Но однако при компиляции такого кода другим компилятором возникнут ошибки, которые иногда просто дьявольски трудно выпиливать.
Записан
Dancing_on_water
Гость
Re: проблемы с компиляцией программы
«
Ответ #4 :
Декабрь 28, 2012, 15:52 »
Цитата: alex от Декабрь 28, 2012, 11:46
Значит скомпилировал бибилотеку Qt с MSVS. а при попытке скомпилировать в ней проект с помощью MinGW получил ошибку.Почему нельзя использовать разные компиляторы?
Ты пытаешься с помощью MinGW скомпилировать проект, используя dll скомпилированные в MSVC?
Записан
alex
Гость
Re: проблемы с компиляцией программы
«
Ответ #5 :
Декабрь 29, 2012, 12:52 »
Цитата: Dancing_on_water от Декабрь 28, 2012, 15:52
Цитата: alex от Декабрь 28, 2012, 11:46
Значит скомпилировал бибилотеку Qt с MSVS. а при попытке скомпилировать в ней проект с помощью MinGW получил ошибку.Почему нельзя использовать разные компиляторы?
а вы правы но я все равно не понимаю. Поясните на примерах ваши слова
Записан
Bepec
Гость
Re: проблемы с компиляцией программы
«
Ответ #6 :
Декабрь 29, 2012, 14:39 »
Код:
int a = *;//ввод пользователем.
int b[a];
MinGW пропустит такой код и скомпилирует.
MS такой код обругает матом и убьёт жалкую попытку скомпилировать.
Ибо по стандарту массивы должны быть константной длины, или же создаваться оператором new. (могу и ошибаться
)
Записан
Dancing_on_water
Гость
Re: проблемы с компиляцией программы
«
Ответ #7 :
Декабрь 29, 2012, 16:42 »
Судя по цитате это обращение ко мне. Но я ничего не понял
Верес: по стандарту много что должно быть и чего компиляторы делают\не делают. Но Qt написан так, что в хедерах API нет (по крайне мере я не встречал) зависимости от компиляторов. т.е. все платформо\компиляторо- зависимый код уде откомпилирован и спрятан в dll. Здесь дело здесь в другом.
Формат dll описан для вызова функций, наподобие паскалевских или сишных, и все компиляторы спокойно могу юзать dll, скомпилированные в другом компиляторе, если там только функции. А вот насчет классов, то формат это не регламентирует. И каждый компилятор решает задачу загрузки\линковки по-своему.
Думаю (но не уверен, т.к. не копал тему глубоко), что именно в этом причина.
P.S. сплошь рядом присутствуют проблемы при загрузке dll с классами собранные не просто разными компиляторами, но и разными версиями одного и тогоже компилятора.
Записан
mutineer
Гость
Re: проблемы с компиляцией программы
«
Ответ #8 :
Декабрь 29, 2012, 16:46 »
Цитата: Dancing_on_water от Декабрь 29, 2012, 16:42
Формат dll описан для вызова функций, наподобие паскалевских или сишных, и все компиляторы спокойно могу юзать dll, скомпилированные в другом компиляторе, если там только функции.
Могут спокойно, если у них совпадает формат вызова (порядок заталкивания параметров в стек, etc) либо он указан явно и одинаков
Записан
Bepec
Гость
Re: проблемы с компиляцией программы
«
Ответ #9 :
Декабрь 29, 2012, 17:19 »
Проще выражаясь - хрен что ТС скомпилит, если библиотеки скомпилены другим компилятором.
Записан
Igors
Джедай : наставник для всех
Offline
Сообщений: 11445
Re: проблемы с компиляцией программы
«
Ответ #10 :
Декабрь 29, 2012, 18:31 »
Цитата: Bepec от Декабрь 29, 2012, 14:39
Код:
int a = *;//ввод пользователем.
int b[a];
MinGW пропустит такой код и скомпилирует.
MS такой код обругает матом и убьёт жалкую попытку скомпилировать.
Ибо по стандарту массивы должны быть константной длины, или же создаваться оператором new. (могу и ошибаться
)
Насколько мне известно, в стандарт эта удобная вещичка не входит, но практически все компиляторы ее поддерживают, может MSVC единственный что нет. Однако какое это отношение имеет к скомпилированной статик либе? Код создан и в либе сидит, линкеру может помешать только отсутствие внешних ссылок. "Удобный массив" создается через alloca (именно "a" в конце). Если MSVC видит alloca в какой-то из своих либ - то все слинкуется и будет работать. Если же подключается dll - то все еще проще, совпадали бы правила вызова как уже сказали выше.
Однако если в дело вмешивается напр STL, то все, приплыли. Потому что реализация того же std::vector различна в разных компиляторах, эта внешняя ссылка остается неразрешенной, должен быть только свой/родной vector.
Практически вывод тот же: компилируйте все однообразно и не ищите приключений
Записан
alex
Гость
Re: проблемы с компиляцией программы
«
Ответ #11 :
Декабрь 29, 2012, 18:35 »
спасибо вам магистры за информацию
Записан
Old
Джедай : наставник для всех
Online
Сообщений: 4350
Re: проблемы с компиляцией программы
«
Ответ #12 :
Декабрь 29, 2012, 18:42 »
Цитата: Igors от Декабрь 29, 2012, 18:31
Однако если в дело вмешивается напр STL, то все, приплыли. Потому что реализация того же std::vector различна в разных компиляторах, эта внешняя ссылка остается неразрешенной, должен быть только свой/родной vector.
Не реализация, а именование (mangling) функций и методов различаются у разных компиляторов.
Записан
Igors
Джедай : наставник для всех
Offline
Сообщений: 11445
Re: проблемы с компиляцией программы
«
Ответ #13 :
Декабрь 29, 2012, 19:04 »
Цитата: Old от Декабрь 29, 2012, 18:42
Не реализация, а именование (mangling) функций и методов различаются у разных компиляторов.
Поля данных разные. А у MSVC они могут быть разными даже для debug/release и зависеть от директив компилятора
Записан
Old
Джедай : наставник для всех
Online
Сообщений: 4350
Re: проблемы с компиляцией программы
«
Ответ #14 :
Декабрь 29, 2012, 19:10 »
Цитата: Igors от Декабрь 29, 2012, 19:04
Поля данных разные. А у MSVC они могут быть разными даже для debug/release и зависеть от директив компилятора
Не знаю, что имеется ввиду под "поля данных"... Есть соглашения о вызовах, если их соблюдать то все будет работать, методы будут спокойно получать входные параметры.
Если имеется ввиду внутренняя структура объектов классов, то здесь тоже все будет нормально. Главное не создавать объект конструктором из одной библиотек, а для работы использовать методы из другой. Ну до такого вряд-ли кто-то додумается.
«
Последнее редактирование: Декабрь 29, 2012, 19:28 от Old
»
Записан
Страниц: [
1
]
2
Вверх
Печать
« предыдущая тема
следующая тема »
Перейти в:
Пожалуйста, выберите назначение:
-----------------------------
Qt
-----------------------------
=> Вопросы новичков
=> Уроки и статьи
=> Установка, сборка, отладка, тестирование
=> Общие вопросы
=> Пользовательский интерфейс (GUI)
=> Qt Quick
=> Model-View (MV)
=> Базы данных
=> Работа с сетью
=> Многопоточное программирование, процессы
=> Мультимедиа
=> 2D и 3D графика
=> OpenGL
=> Печать
=> Интернационализация, локализация
=> QSS
=> XML
=> Qt Script, QtWebKit
=> ActiveX
=> Qt Embedded
=> Дополнительные компоненты
=> Кладовая готовых решений
=> Вклад сообщества в Qt
=> Qt-инструментарий
-----------------------------
Программирование
-----------------------------
=> Общий
=> С/C++
=> Python
=> Алгоритмы
=> Базы данных
=> Разработка игр
-----------------------------
Компиляторы и платформы
-----------------------------
=> Linux
=> Windows
=> Mac OS X
=> Компиляторы
===> Visual C++
-----------------------------
Разное
-----------------------------
=> Новости
===> Новости Qt сообщества
===> Новости IT сферы
=> Говорилка
=> Юмор
=> Объявления
Загружается...