|
120 / 4 / 1
Регистрация: 15.06.2016
Сообщений: 236
|
|
Компиляция *.cpp компилятором gcc30.12.2018, 01:23. Показов 4683. Ответов 31
Метки нет (Все метки)
Недавно столкнулся с проблемой отсутствия библиотеки libgcc_s_dw2-1.dll (виртуалка с чистой виндой). Начал копаться и обнаружил, что , эта проблема свойственна только x86 компилятору(я использую mingw-w64). Файл, скомпилированный при помощи x64 компилятора(тож mingw-w64) запускается на ура. Что еще более странно, это,что если скомпилировать исходники компилятором gcc x86, а не g++ x86(пишу на плюсах), то ошибка пропадает. Пишу, чтобы вы помогли разобраться в этих аномалиях.Не люблю, когда что-то недопонимаю
0
|
|
| 30.12.2018, 01:23 | |
|
Ответы с готовыми решениями:
31
После установки Dev-Cpp 5.11 TDM-GCC 4.9.2 Setup.exe дает ошибку Exception elinifileexpectation in module devcpp․exe Компиляция проекта в gcc Непонятные проблемы с компилятором gcc |
|
19500 / 10105 / 2461
Регистрация: 30.01.2014
Сообщений: 17,816
|
||
| 08.01.2019, 02:48 | ||
|
Добавлено через 52 секунды Ну что, вы сделали какие-либо выводы из того, что вам написали?
1
|
||
|
120 / 4 / 1
Регистрация: 15.06.2016
Сообщений: 236
|
|
| 09.01.2019, 00:35 [ТС] | |
|
Ну это понятно, на основной вопрос ответа я все же не нашел: почему нет ошибки отсутствия либы при запуске программы, скомпилированный через gcc. Если скомпилировать тот же код используя g++, ошибка появляется, да и размер файла увеличивается. Посмотрите в архиве выше, попробуйте запустить каждый файл на чистой системе, вы сами поймёте
Добавлено через 2 минуты Реальной проблемы как таковой нету, я могу и собирать свои проекты используя gcc, просто хочется понять что к чему, почему так происходит.., ну вы поняли
0
|
|
|
19500 / 10105 / 2461
Регистрация: 30.01.2014
Сообщений: 17,816
|
||
| 09.01.2019, 11:35 | ||
|
Краткий ответ такой: "потому что gcc не запускает линкер с указанием библиотеки c++-runtime.". G++ предназначен для сборки С++ и делает некоторую дополнительную работу по умолчанию, характерную для С++. Предполагается, что типичная программа на С++ таки зависит от С++ Runtime и поэтому линковщику дается указание подключить ее по умолчанию. GCC таких предположений не делает, т.к. это централизованный механизм, который может запускать сборку на любом языке из доступных в Compiler Collection. Если бы вы использовали код, который зависит от с++ runtime, наподобие того, что предложили вам выше, то вы увидели бы ошибку линкера при попытке собрать код через gcc. Если вы ее не увидели, то ваш код на самом деле не требует зависимости от libstdc++, и сборка его через gcc, а не g++ ни к чему плохому не приводит, а похоже наоборот, даже улучшает состояние дел
1
|
||
|
120 / 4 / 1
Регистрация: 15.06.2016
Сообщений: 236
|
||
| 09.01.2019, 16:42 [ТС] | ||
|
Добавлено через 4 минуты И почему файлы, скомпилированные g++(x64), в отличие от g++(x86) запускаются без ошибок?
0
|
||
|
19500 / 10105 / 2461
Регистрация: 30.01.2014
Сообщений: 17,816
|
|||||
| 09.01.2019, 18:37 | |||||
|
Вы же должны понимать, что отсюда совсем не понятно что и как вы запускаете. Приведите логи, подробные, я вам все там объясню. Добавлено через 4 минуты Да, и код, который вы дали в #14 совершенно справедливо не нуждается в libstdc++, т.к. использует только вызовы из С runtime. Добавлено через 4 минуты Увеличение размера исполняемого файла при увеличении кол-ва зависимостей - это вполне закономерное явление. Т.к. список зависимостей хранится в специальных таблицах внутри исполняемого файла. Также флаги линковщика могут быть различными (опять же смотрите результат работы с опцией -v), что побуждает его генерировать какой-то дополнительный код. Добавлено через 7 минут GreyCat, я посмотрел ваш архив выше, и похоже что версия которую вы назвали gcc(x64)_with_-lstdc++.exe совсем не тащит libstdc++. Т.е. так, как будто ее и не указывали вовсе. По всей видимости умный линковщик просто проигнорировал ваше пожелание линковать бесполезную библиотеку. Вот и ответ, похоже.
1
|
|||||
|
120 / 4 / 1
Регистрация: 15.06.2016
Сообщений: 236
|
|||||||||||||
| 09.01.2019, 21:20 [ТС] | |||||||||||||
|
Лог компиляции gcc(x86):
0
|
|||||||||||||
|
19500 / 10105 / 2461
Регистрация: 30.01.2014
Сообщений: 17,816
|
|||
| 09.01.2019, 21:36 | |||
-lstdc++ -lmingw32 -lgcc_s -lgcc -lmoldname -lmingwex -lmsvcrt -lpthread -ladvapi32 -lshell32 -luser32 -lkernel32 -liconv -lmingw32 -lgcc_s -lgcc -lmoldname -lmingwex -lmsvcrtТут есть и stdc++ и gcc_s
1
|
|||
|
120 / 4 / 1
Регистрация: 15.06.2016
Сообщений: 236
|
||||||||||||
| 09.01.2019, 21:54 [ТС] | ||||||||||||
|
оу, щит, прошу извинить и принять новый вариант
Лог g++(x86):
А есть опция отключения этого -lstdc++? Или проще компилировать, используя gcc?
0
|
||||||||||||
|
19500 / 10105 / 2461
Регистрация: 30.01.2014
Сообщений: 17,816
|
|||
| 09.01.2019, 23:06 | |||
-nostdlib: https://gcc.gnu.org/onlinedocs... tions.htmlДобавлено через 3 минуты X64 окружение похоже чуть поумнее, и игнорирует ненужную зависимость при линковке.
1
|
|||
|
120 / 4 / 1
Регистрация: 15.06.2016
Сообщений: 236
|
|||||||||||
| 10.01.2019, 00:02 [ТС] | |||||||||||
|
Компилирую так:
0
|
|||||||||||
|
19500 / 10105 / 2461
Регистрация: 30.01.2014
Сообщений: 17,816
|
||
| 10.01.2019, 00:13 | ||
|
Но похоже для mingw -nostdlib более фатально, т.к. отключает всю обвязку, которой довольно много. Наверное все-таки лучше вам не пользоваться ей в mingw
1
|
||
|
120 / 4 / 1
Регистрация: 15.06.2016
Сообщений: 236
|
||||||
| 10.01.2019, 00:17 [ТС] | ||||||
![]() gcc и все) Главное я понял что к чему) Спасибо всем участникам)
0
|
||||||
| 10.01.2019, 00:17 | |
|
Помогаю со студенческими работами здесь
32
Учим code::blocks компилировать gcc компилятором как скомпилировать исходник на Python компилятором gcc? Как записать компиляцию файла С в cgi компилятором gcc? Можно ли компилятором gcc создать COM объекты, сервер, в частности? Как осуществляется компиляция и компоновка программы со строковым компилятором? Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
SDL3 для Desktop (MinGW): Создаём пустое окно с нуля для 2D-графики на SDL3, Си и C++
8Observer8 10.03.2026
Содержание блога
Финальные проекты на Си и на C++:
hello-sdl3-c. zip
hello-sdl3-cpp. zip
Результат:
|
Установка CMake и MinGW 13.1 для сборки С и C++ приложений из консоли и из Qt Creator в EXE
8Observer8 10.03.2026
Содержание блога
MinGW - это коллекция инструментов для сборки приложений в EXE. CMake - это система сборки приложений. Здесь описаны базовые шаги для старта программирования с помощью CMake и. . .
|
Как дизайн сайта влияет на конверсию: 7 решений, которые реально повышают заявки
Neotwalker 08.03.2026
Многие до сих пор воспринимают дизайн сайта как “красивую оболочку”. На практике всё иначе: дизайн напрямую влияет на то, оставит человек заявку или уйдёт через несколько секунд.
Даже если у вас. . .
|
Модульная разработка через nuget packages
DevAlt 07.03.2026
Сложившийся в . Net-среде способ разработки чаще всего предполагает
монорепозиторий в котором находятся все исходники.
При создании нового решения, мы просто добавляем нужные проекты
и имеем. . .
|
|
Модульный подход на примере F#
DevAlt 06.03.2026
В блоге дяди Боба наткнулся на такое определение:
В этой книге («Подход, основанный на вариантах использования») Ивар утверждает,
что архитектура программного обеспечения — это
структуры,. . .
|
Управление камерой с помощью скрипта OrbitControls.js на Three.js: Вращение, зум и панорамирование
8Observer8 05.03.2026
Содержание блога
Финальная демка в браузере работает на Desktop и мобильных браузерах. Итоговый код: orbit-controls-threejs-js. zip. Сканируйте QR-код на мобильном. Вращайте камеру одним пальцем,. . .
|
SDL3 для Web (WebAssembly): Синхронизация спрайтов SDL3 и тел Box2D
8Observer8 04.03.2026
Содержание блога
Финальная демка в браузере. Итоговый код: finish-sync-physics-sprites-sdl3-c. zip
На первой гифке отладочные линии отключены, а на второй включены:. . .
|
SDL3 для Web (WebAssembly): Идентификация объектов на Box2D v3 - использование userData и событий коллизий
8Observer8 02.03.2026
Содержание блога
Финальная демка в браузере. Итоговый код: finish-collision-events-sdl3-c. zip Сканируйте QR-код на мобильном и вы увидите, что появится джойстик для управления главным героем.
. . .
|