С Новым годом! Форум программистов, компьютерный форум, киберфорум
C/C++: IDE, инструментарий
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.52/21: Рейтинг темы: голосов - 21, средняя оценка - 4.52
120 / 4 / 1
Регистрация: 15.06.2016
Сообщений: 236

Компиляция *.cpp компилятором gcc

30.12.2018, 01:23. Показов 4604. Ответов 31
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Недавно столкнулся с проблемой отсутствия библиотеки libgcc_s_dw2-1.dll (виртуалка с чистой виндой). Начал копаться и обнаружил, что , эта проблема свойственна только x86 компилятору(я использую mingw-w64). Файл, скомпилированный при помощи x64 компилятора(тож mingw-w64) запускается на ура. Что еще более странно, это,что если скомпилировать исходники компилятором gcc x86, а не g++ x86(пишу на плюсах), то ошибка пропадает. Пишу, чтобы вы помогли разобраться в этих аномалиях.Не люблю, когда что-то недопонимаю
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
30.12.2018, 01:23
Ответы с готовыми решениями:

После установки Dev-Cpp 5.11 TDM-GCC 4.9.2 Setup.exe дает ошибку Exception elinifileexpectation in module devcpp․exe
Ошибка- Exception elinifileexpectation in module devcpp․exe at 0004B209 Unable to write to C:\Dev-Cpp\config\devcpp.ini

Компиляция проекта в gcc
Здравствуйте, форумчане! Прошу помочь разобраться! Есть программа, представленная в 3х файлах. В первом содержится описание класса...

Непонятные проблемы с компилятором gcc
Всем привет ! Вчера делал много настроек на сервере - и незнаю может сбил что-то или что удалил но вроде все далал с умомо , ...

31
120 / 4 / 1
Регистрация: 15.06.2016
Сообщений: 236
04.01.2019, 00:17  [ТС]
Что же все-таки произойдет , если скомпилировать c++ исходники компилятором gcc?
0
415 / 150 / 48
Регистрация: 02.06.2016
Сообщений: 364
04.01.2019, 08:28
Цитата Сообщение от GreyCat Посмотреть сообщение
Файл, скомпилированный при помощи x64 компилятора(тож mingw-w64) запускается на ура.
Если это та же система на которой установлен компилятор. возможно у вас прописан путь до компилятора в переменных окружения.
Цитата Сообщение от GreyCat Посмотреть сообщение
Начал копаться и обнаружил, что , эта проблема свойственна только x86 компилятору
Попробуйте ключ -static включить
1
120 / 4 / 1
Регистрация: 15.06.2016
Сообщений: 236
04.01.2019, 22:04  [ТС]
Цитата Сообщение от GoshaM Посмотреть сообщение
Если это та же система на которой установлен компилятор. возможно у вас прописан путь до компилятора в переменных окружения.
Компиляторы настроены в ide(qt creator).Есть возможность выбрать определенный компилятор.

Цитата Сообщение от GoshaM Посмотреть сообщение
Попробуйте ключ -static включить
Действительно помогло. Теперь программа, скомпилированная g++(x86) запускается на чистой системе без ошибок.Размер исполняемого файла УМЕНЬШИЛСЯ на 512 байт.Почему так? static ведь прикрепляет доп модули к исполняемому файлу, а не наоборот. Пожалуйста разъясните))

Добавлено через 7 часов 59 минут
Все это свойственно пустому проекту. В реальном проекте опция -static увеличивает размер файла в несколько раз.Опять же, если скомпилировать c++ исходники компилятором gcc(x86), получим файл маленького размера и при том все запускается без ошибок. Почему так происходит?
0
415 / 150 / 48
Регистрация: 02.06.2016
Сообщений: 364
05.01.2019, 02:26
Не компилирует у меня gcc простейший cpp код. На разных версиях пробовал.
1
120 / 4 / 1
Регистрация: 15.06.2016
Сообщений: 236
05.01.2019, 16:44  [ТС]
у меня компилятор mingw-w64.Все компилирует)
0
415 / 150 / 48
Регистрация: 02.06.2016
Сообщений: 364
05.01.2019, 17:20
У меня тоже MinGW-W64 GCC-8.1.0 отсюда
1
120 / 4 / 1
Регистрация: 15.06.2016
Сообщений: 236
06.01.2019, 12:03  [ТС]
Странно..
0
415 / 150 / 48
Регистрация: 02.06.2016
Сообщений: 364
06.01.2019, 12:08
Вот тема. С ключом -lstdc++ собирается, но размер такой же как и при cборке g++.
1
120 / 4 / 1
Регистрация: 15.06.2016
Сообщений: 236
06.01.2019, 15:10  [ТС]
Не, это не то. Пробовал опцию -lstdc++, ничего не поменялось, даже размер исполняемого файла не изменился.
Вы мне скажите: почему размеры файлов , скомпилированных с помощью gcc и g++ разнятся. Как я понял разница в обоих случаях лишь в линковке. Или что еще?
0
19491 / 10097 / 2460
Регистрация: 30.01.2014
Сообщений: 17,805
07.01.2019, 19:39
Цитата Сообщение от GreyCat Посмотреть сообщение
Опять же, если скомпилировать c++ исходники компилятором gcc(x86)
Gcc и c++

Добавлено через 2 минуты
Цитата Сообщение от GreyCat Посмотреть сообщение
Вы мне скажите: почему размеры файлов , скомпилированных с помощью gcc и g++ разнятся
Я думаю здесь надо на код посмотреть, который вы собираете. Это код на Си или на C++?
1
415 / 150 / 48
Регистрация: 02.06.2016
Сообщений: 364
07.01.2019, 20:08
Цитата Сообщение от DrOffset Посмотреть сообщение
Сишный компилятор - это сс
В MinGW это тоже так? Я что-то никакого сс не вижу.
1
19491 / 10097 / 2460
Регистрация: 30.01.2014
Сообщений: 17,805
07.01.2019, 21:07
Цитата Сообщение от GoshaM Посмотреть сообщение
В MinGW это тоже так?
Да.

Цитата Сообщение от GoshaM Посмотреть сообщение
Я что-то никакого сс не вижу.
Может быть не там смотрите.

Добавлено через 10 минут
Цитата Сообщение от GoshaM Посмотреть сообщение
В MinGW это тоже так?
Хотя видимо вы правы, в чистом MinGW похоже нет отдельного cc.exe. Но он присутствует в MSYS2.
Посмотреть какие конкретно программы вызывает gcc именно в вашем случае можно добавив при компиляции ключ -v (verbose).

Добавлено через 3 минуты
У меня, например, вот так:
Code
1
2
3
4
5
6
7
8
9
10
$ gcc ./test.c -v
Using built-in specs.
COLLECT_GCC=E:\Develop\MSYS\mingw64\bin\gcc.exe
COLLECT_LTO_WRAPPER=E:/Develop/MSYS/mingw64/bin/../lib/gcc/x86_64-w64-mingw32/8.2.0/lto-wrapper.exe
Target: x86_64-w64-mingw32
Configured with: ../gcc-8.2.0/configure --prefix=/mingw64 --with-local-prefix=/mingw64/local --build=x86_64-w64-mingw32 --host=x86_64-w64-mingw32 --target=x86_64-w64-mingw32 --with-native-system-header-dir=/mingw64/x86_64-w64-mingw32/include --libexecdir=/mingw64/lib --enable-bootstrap --with-arch=x86-64 --with-tune=generic --enable-languages=ada,c,lto,c++,objc,obj-c++,fortran --enable-shared --enable-static --enable-libatomic --enable-threads=posix --enable-graphite --enable-fully-dynamic-string --enable-libstdcxx-filesystem-ts=yes --enable-libstdcxx-time=yes --disable-libstdcxx-pch --disable-libstdcxx-debug --disable-isl-version-check --enable-lto --enable-libgomp --disable-multilib --enable-checking=release --disable-rpath --disable-win32-registry --disable-nls --disable-werror --disable-symvers --with-libiconv --with-system-zlib --with-gmp=/mingw64 --with-mpfr=/mingw64 --with-mpc=/mingw64 --with-isl=/mingw64 --with-pkgversion='Rev1, Built by MSYS2 project' --with-bugurl=https://sourceforge.net/projects/msys2 --with-gnu-as --with-gnu-ld
Thread model: posix
gcc version 8.2.0 (Rev1, Built by MSYS2 project)
COLLECT_GCC_OPTIONS='-v' '-mtune=generic' '-march=x86-64'
 E:/Develop/MSYS/mingw64/lib/gcc/x86_64-w64-mingw32/8.2.0/cc1.exe -quiet -v -iprefix E:/Develop/MSYS/mingw64/lib/gcc/x86_64-w64-mingw32/8.2.0/ -D_REENTRANT ./test.c -quiet -dumpbase test.c -mtune=generic -march=x86-64 -auxbase test -version -o E:\Develop\MSYS\tmp\ccFPtr7Z.s
Здесь видно, что gcc на самом деле вызывает компилятор cc1.exe для файла с расширением *.с
Вот тоже самое, но для файла cpp (вызывается cc1plus.exe):
Code
1
2
3
4
5
6
7
8
9
10
$ gcc ./test.cpp -v
Using built-in specs.
COLLECT_GCC=E:\Develop\MSYS\mingw64\bin\gcc.exe
COLLECT_LTO_WRAPPER=E:/Develop/MSYS/mingw64/bin/../lib/gcc/x86_64-w64-mingw32/8.2.0/lto-wrapper.exe
Target: x86_64-w64-mingw32
Configured with: ../gcc-8.2.0/configure --prefix=/mingw64 --with-local-prefix=/mingw64/local --build=x86_64-w64-mingw32 --host=x86_64-w64-mingw32 --target=x86_64-w64-mingw32 --with-native-system-header-dir=/mingw64/x86_64-w64-mingw32/include --libexecdir=/mingw64/lib --enable-bootstrap --with-arch=x86-64 --with-tune=generic --enable-languages=ada,c,lto,c++,objc,obj-c++,fortran --enable-shared --enable-static --enable-libatomic --enable-threads=posix --enable-graphite --enable-fully-dynamic-string --enable-libstdcxx-filesystem-ts=yes --enable-libstdcxx-time=yes --disable-libstdcxx-pch --disable-libstdcxx-debug --disable-isl-version-check --enable-lto --enable-libgomp --disable-multilib --enable-checking=release --disable-rpath --disable-win32-registry --disable-nls --disable-werror --disable-symvers --with-libiconv --with-system-zlib --with-gmp=/mingw64 --with-mpfr=/mingw64 --with-mpc=/mingw64 --with-isl=/mingw64 --with-pkgversion='Rev1, Built by MSYS2 project' --with-bugurl=https://sourceforge.net/projects/msys2 --with-gnu-as --with-gnu-ld
Thread model: posix
gcc version 8.2.0 (Rev1, Built by MSYS2 project)
COLLECT_GCC_OPTIONS='-v' '-mtune=generic' '-march=x86-64'
 E:/Develop/MSYS/mingw64/lib/gcc/x86_64-w64-mingw32/8.2.0/cc1plus.exe -quiet -v -iprefix E:/Develop/MSYS/mingw64/lib/gcc/x86_64-w64-mingw32/8.2.0/ -D_REENTRANT ./test.cpp -quiet -dumpbase test.cpp -mtune=generic -march=x86-64 -auxbase test -version -o E:\Develop\MSYS\tmp\ccdQdA8i.s
Добавлено через 19 минут
Да, все-таки в обычном MinGW нет отдельного сс. Но в корне это ничего не меняет, принцип остается тем же. Что MinGW-шный GCC, что UNIX-совый CC при передаче им файла *.c вызывают непосредственно компилятор cc1 (или cc1.exe для MinGW).
Для MinGW w64 он должен лежать по пути похожему на вот такой: <каталог mingw>\libexec\gcc\x86_64-w64-mingw32\<версия>\.
2
120 / 4 / 1
Регистрация: 15.06.2016
Сообщений: 236
07.01.2019, 21:24  [ТС]
Цитата Сообщение от DrOffset Посмотреть сообщение
Я думаю здесь надо на код посмотреть, который вы собираете. Это код на Си или на C++?
код c++
C++
1
2
3
4
5
6
#include <stdio.h>
int main()
{
    printf("Hello world");
    return 0;
}
Эту программу скомпилировал разными компиляторами с разными опциями.Можете попробовать запустить каждый экземпляр, предварительно удалив с PATH путь до компилятора, чтобы сымитировать запуск на чистой системе.P010_research1.rar
0
120 / 4 / 1
Регистрация: 15.06.2016
Сообщений: 236
07.01.2019, 21:40  [ТС]
Лично у меня запускается все, кроме g++(x86),где, собственно появляется ошибка отсутствия библиотеки libgcc_s_dw2-1.dll

Добавлено через 12 минут
Цитата Сообщение от DrOffset Посмотреть сообщение
Для MinGW w64 он должен лежать по пути похожему на вот такой: <каталог mingw>\libexec\gcc\x86_64-w64-mingw32\<версия>\.
Да, таки есть, проверил. Опция -v дала понять, что gcc вызывает cc1plus.exe. Значит дело в линковке?
0
19491 / 10097 / 2460
Регистрация: 30.01.2014
Сообщений: 17,805
07.01.2019, 21:43
Цитата Сообщение от GreyCat Посмотреть сообщение
собственно появляется ошибка отсутствия библиотеки libgcc_s_dw2-1.dll
Ну так а сам этот файл у вас есть в составе mingw?
1
120 / 4 / 1
Регистрация: 15.06.2016
Сообщений: 236
07.01.2019, 22:43  [ТС]
есть. Лежит тут C:\Program Files (x86)\mingw-w64\i686-8.1.0-posix-dwarf-rt_v6-rev0\mingw32\i686-w64-mingw32\lib
А если появится нужда запустить программу на другой системе, на которой нет mingw и следовательно этой либы? Тащить ее с собой тоже не разумно, потому что есть другой вариант: скомпилировать этот же код с помощью gcc. Не знаю что там происходит, но проблема исчезает, да и к тому же размер исполняемого файла уменьшается примерно на 1 кб. Очень странно.Это я и пытаюсь разобрать подробно. Почему так происходит.

Добавлено через 4 минуты
Цитата Сообщение от DrOffset Посмотреть сообщение
Ну так а сам этот файл у вас есть в составе mingw?
Когда я писал что появлялась ошибка, я имел ввиду запуск на абсолютно чистой виртуалке.
0
415 / 150 / 48
Регистрация: 02.06.2016
Сообщений: 364
07.01.2019, 23:06
Цитата Сообщение от GreyCat Посмотреть сообщение
Очень странно.
Теперь как раз все понятно.
Напишите так и все станет на свои места:
C++
1
2
3
4
5
6
7
8
9
#include <iostream>
 
using namespace std;
 
int main()
{
    cout << "Hello world!" << endl;
    return 0;
}
1
19491 / 10097 / 2460
Регистрация: 30.01.2014
Сообщений: 17,805
07.01.2019, 23:11
Цитата Сообщение от GreyCat Посмотреть сообщение
А если появится нужда запустить программу на другой системе, на которой нет mingw и следовательно этой либы? Тащить ее с собой тоже не разумно
На самом деле это нормально. Компоновка нужных библиотек входит в типичный процесс деплоя приложения.

Цитата Сообщение от GreyCat Посмотреть сообщение
скомпилировать этот же код с помощью gcc. Не знаю что там происходит, но проблема исчезает, да и к тому же размер исполняемого файла уменьшается примерно на 1 кб. Очень странно
Я же сказал вам, что нужно посмотреть на код, который вы собираете.
libgcc_s очевидно идет зависимостью к libstdc++ (ключ линковки, который вы указывали -lstdc++, подключает именно ее), которую подключает по умолчанию g++. Если ваш код на самом деле не требует libstdс++, то получается, что убрав ее из зависимостей, вы избавились и от libgcc_s. Целиком и полностью все зависит от того кода, который вы компилируете.
1
120 / 4 / 1
Регистрация: 15.06.2016
Сообщений: 236
08.01.2019, 00:24  [ТС]
Code
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
D:\Documents\CPlusPlus\P010_research1>"C:\Program Files (x86)\mingw-w64\i686-8.1
.0-posix-dwarf-rt_v6-rev0\mingw32\bin\gcc" main.cpp -o gcc(x86).exe
C:\Users\admin\AppData\Local\Temp\cc8wwhYi.o:main.cpp:(.text+0x21): undefined re
ference to `std::cout'
C:\Users\admin\AppData\Local\Temp\cc8wwhYi.o:main.cpp:(.text+0x26): undefined re
ference to `std::basic_ostream<char, std::char_traits<char> >& std::operator<< <
std::char_traits<char> >(std::basic_ostream<char, std::char_traits<char> >&, cha
r const*)'
C:\Users\admin\AppData\Local\Temp\cc8wwhYi.o:main.cpp:(.text+0x2d): undefined re
ference to `std::basic_ostream<char, std::char_traits<char> >& std::endl<char, s
td::char_traits<char> >(std::basic_ostream<char, std::char_traits<char> >&)'
C:\Users\admin\AppData\Local\Temp\cc8wwhYi.o:main.cpp:(.text+0x34): undefined re
ference to `std::ostream::operator<<(std::ostream& (*)(std::ostream&))'
C:\Users\admin\AppData\Local\Temp\cc8wwhYi.o:main.cpp:(.text+0x54): undefined re
ference to `std::ios_base::Init::~Init()'
C:\Users\admin\AppData\Local\Temp\cc8wwhYi.o:main.cpp:(.text+0x75): undefined re
ference to `std::ios_base::Init::Init()'
collect2.exe: error: ld returned 1 exit status


Добавлено через 5 минут
с флагом -lstdc++ ошибок нет
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
08.01.2019, 00:24
Помогаю со студенческими работами здесь

Учим code::blocks компилировать gcc компилятором
не умею пользоваться форумом, переместите в нужную ветку если не туда попал в общем те кто пользуются кодблоксом знают что он С/С++ ...

как скомпилировать исходник на Python компилятором gcc?
Друзья! Знает кто-нибудь? А то в инете нет ничё, какие-то скрипты, интерпретаторы... Просто я в книге по GCC прочёл: &quot;...друrие...

Как записать компиляцию файла С в cgi компилятором gcc?
Добрый день! Вопрос такой. Как скомпилировать в gcc файл c в cgi в Убунту. Если прописать gcc путь/script.c компиляция...

Можно ли компилятором gcc создать COM объекты, сервер, в частности?
По-моему, нет. Ведь в сервере среди всего прочего надо реализовывать метод объекта QueryInterface. Он может запросто принять первым...

Как осуществляется компиляция и компоновка программы со строковым компилятором?
Можете ответить подробно на этот вопрос.


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Новые блоги и статьи
сукцессия микоризы: основная теория в виде двух уравнений.
anaschu 11.01.2026
https:/ / rutube. ru/ video/ 7a537f578d808e67a3c6fd818a44a5c4/
WordPad для Windows 11
Jel 10.01.2026
WordPad для Windows 11 — это приложение, которое восстанавливает классический текстовый редактор WordPad в операционной системе Windows 11. После того как Microsoft исключила WordPad из. . .
Classic Notepad for Windows 11
Jel 10.01.2026
Old Classic Notepad for Windows 11 Приложение для Windows 11, позволяющее пользователям вернуть классическую версию текстового редактора «Блокнот» из Windows 10. Программа предоставляет более. . .
Почему дизайн решает?
Neotwalker 09.01.2026
В современном мире, где конкуренция за внимание потребителя достигла пика, дизайн становится мощным инструментом для успеха бренда. Это не просто красивый внешний вид продукта или сайта — это. . .
Модель микоризы: классовый агентный подход 3
anaschu 06.01.2026
aa0a7f55b50dd51c5ec569d2d10c54f6/ O1rJuneU_ls https:/ / vkvideo. ru/ video-115721503_456239114
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR
ФедосеевПавел 06.01.2026
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR ВВЕДЕНИЕ Введу сокращения: аналоговый ПИД — ПИД регулятор с управляющим выходом в виде числа в диапазоне от 0% до. . .
Модель микоризы: классовый агентный подход 2
anaschu 06.01.2026
репозиторий https:/ / github. com/ shumilovas/ fungi ветка по-частям. коммит Create переделка под биомассу. txt вход sc, но sm считается внутри мицелия. кстати, обьем тоже должен там считаться. . . .
Расчёт токов в цепи постоянного тока
igorrr37 05.01.2026
/ * Дана цепь постоянного тока с сопротивлениями и источниками (напряжения, ЭДС и тока). Найти токи и напряжения во всех элементах. Программа составляет систему уравнений по 1 и 2 законам Кирхгофа и. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru