Этот баннер — требование Роскомнадзора для исполнения 152 ФЗ.
«На сайте осуществляется обработка файлов cookie, необходимых для работы сайта, а также для анализа использования сайта и улучшения предоставляемых сервисов с использованием метрической программы Яндекс.Метрика. Продолжая использовать сайт, вы даёте согласие с использованием данных технологий».
Политика конфиденциальности
|
|
|
Как я люблю gcc
|
|||
|---|---|---|---|
|
#18+
По просьбам зрителей, да и что то у меня накопилось. Это мерзкое недоделанное кривое поделие, с которым приходится работать, т.к местами кроме него ничего нет. ///1 Пример первый - есть структурка - в которой перемешаны int16_t и int32_t, компилятор 32-битный. Структурка передается параметром чужим функциям и соответственно, чувствительна к выравниванию. Так вот, структурка до 98 байт - не выравнивается, т.е ее размер соответствует сумме мемберов. А вот на 98байте компилятору ну просто очень нужно выровнять на оффсет 4. Я конечно понимаю, что он ничего не должен, но ожидаю предсказуемого поведения в сходных случаях. ///2 Окай, я такой значит уже умный - вставляю __attribute__ ((__packed__)) и вроде счастлив. Авотмуй! ///2.1 Во первых, есть такой баг, мало того что плавающий (не всегда проявляется), а еще и мигрирующий между версиями. https://gcc.gnu.org/bugzilla/show_bug.cgi?id=52991 Т.е даже пример из документации https://gcc.gnu.org/onlinedocs/gcc/Common-Type-Attributes.html#Common-Type-Attributes может просто не работать! ///2.2 Целая песня, если у вас вложенные структуры, юнионы и смесь. Не надо думать, что вы написали __attribute__ ((__packed__)), и всё - с несанкционированными выравниваниями покончено. Работа этого аттрибута вполне зависит от погоды, наличия имени структуры, наличия typedef и положения аттрибута относительно порядка имя-аттрибут. ///3 Отдельная тема - качество и понятность генерируемого ассемблера, а за компанию и работа гнусного дизассемблера, которые не попадает в адреса относительно кода. ///4 Который раз твердили миру, -О3 не работает уже 10 лет. Если ваша программа крашится, нужно откатиться на -О2, а лучше и не пробовать. Последний раз - мы тут на форуме гоняли рейтрейсинг, живой пример. ///5 Из мелких придирок - отвратительно медленный старт под Windows всего гнусного тулчейна, жручесть памяти и скорость работы компилятора. Сходу всё не вспоминается, потом продолжу. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.10.2016, 14:19 |
|
||
|
Как я люблю gcc
|
|||
|---|---|---|---|
|
#18+
хм о баге с выравниваниванием я знал, но он мне не так сильно докучает.. вы часто пользуетесь этой фичей что ли? на счет непопадания в адреса - иногда бывает :) это прикольно. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.10.2016, 14:42 |
|
||
|
Как я люблю gcc
|
|||
|---|---|---|---|
|
#18+
сюда же можно отнести качество кода stl наверное :) если попытаться понять что там,то там вообще неразбериха. часто несколько операторов в одной строке, и, если ты попадаешь туда под отладчиком, приходится выполнять их все за раз, что досадно, если нужно войти в какую-то функцию - заходишь сначала во все потроха, а потом куда надо. намешаны пробелы и табы, underscore и camel cale ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.10.2016, 15:20 |
|
||
|
Как я люблю gcc
|
|||
|---|---|---|---|
|
#18+
Никогда не понимал нужды паковать гигантские структуры. Два-три поля упаковать прикола ради - ну нехай будет. Но заниматься паковкой структур постоянно... зачем??? Единственный случай когда удобно иметь упакованную структуру это если ты ее собираешься по сети кидать и это заранее известный формат. Типа заголовка ethernet/tcp/udp пакетов. Но они маааааленькие. Никак не вылазят за такие большие объемы. Во всех остальных случаях удобнее делать полноценную сериализацию. Медленный старт? Где? Почему-то в моих тестах, VC намного медленнее... Впрочем, VC я обычно использую только если нету другого выхода и делаю это почти всегда из-под VS а GCC у меня запускается из makefile'ов всегда. Если вы не любите gcc, вы просто не умеете его готовить. :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.10.2016, 17:34 |
|
||
|
Как я люблю gcc
|
|||
|---|---|---|---|
|
#18+
-О2 в продакшене использовать нельзя. -О3 - а это что такое?? Если хочется использовать -О2 можно купить самую простую версию интеловского компайлера. Одну лицензию и поставить ее на билд-бокс. Особенно если результат идет в продакшен. White Owl....Единственный случай когда удобно иметь упакованную структуру это если ты ее собираешься по сети кидать и это заранее известный формат. Ну или файл(ы) данных за-mmap-лен(ы). А для сети можно сделать сериализацию. Ибо может влиять енднесс. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.10.2016, 18:52 |
|
||
|
Как я люблю gcc
|
|||
|---|---|---|---|
|
#18+
White OwlНикогда не понимал нужды паковать гигантские структуры. Два-три поля упаковать прикола ради - ну нехай будет. Но заниматься паковкой структур постоянно... зачем??? :) встречал такое что одни и те же структуры используются программами на разных языках программирования (COBOL и С, например) в таких случаях без паковки не обойтись ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.10.2016, 01:38 |
|
||
|
Как я люблю gcc
|
|||
|---|---|---|---|
|
#18+
Новый Год, тогда можно прокси сделать.. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.10.2016, 11:48 |
|
||
|
Как я люблю gcc
|
|||
|---|---|---|---|
|
#18+
Как я уже написал, невыровненные структурки нужны для обмена по чужому ABI. Еще пару вещей вспомнил - Red zone. Коснется вас если только вы используете ассемблер (ну или ловите баги порчи стека) - укуренное использование. Т.е ваш стековый массив может краешком лежать в редзоне. Временные переменные, даже не ваши временные, а которые потребовались при оптимизации - тоже. Почему не размещаться с начала по порядку - хз. Возможно используется по порядку с конца. - С99 в исполнении gcc обязывает вас все inine функции переписать как static inline, иначе будет ошибка линковки. Static inline это навязано стандартом, но реализация могла бы и упростить.... Я теперь знаю про extern inline, но в любом случае это жутко неудобно и несовместимо. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.10.2016, 14:39 |
|
||
|
Как я люблю gcc
|
|||
|---|---|---|---|
|
#18+
SiemarglПо просьбам зрителей, да и что то у меня накопилось. Это мерзкое недоделанное кривое поделие, с которым приходится работать, т.к местами кроме него ничего нет. ///1 Пример первый - ........ . Siemargl, а можно ссылочку на ваши программы созданные на С++ и gcc? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.10.2016, 15:51 |
|
||
|
Как я люблю gcc
|
|||
|---|---|---|---|
|
#18+
locked-О2 в продакшене использовать нельзя. -О3 - а это что такое?? . У меня как-то и -O2 работает, и -O3 работает... Не, конечно, багов нет только в коде божественного Виндуоза, это понятно, но всё же -- не так GCC и плох... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.10.2016, 17:49 |
|
||
|
Как я люблю gcc
|
|||
|---|---|---|---|
|
#18+
В одной программе случилось так, что в разных .cpp-файлах есть 2 класса с одинаковыми именами: 1.cpp Код: plaintext 1. 2. 3. 4. 5. 2.cpp Код: plaintext 1. 2. 3. 4. 5. Не copy-paste, классы разные. То есть это было нарушение ODR (one definition rule), но компиляторы C++ к сожалению не обязаны обнаруживать нарушения ODR. Один класс реально использовался, другой -- нет, просто остался как хлам. Оба класса были с виртуальными методами. Соответственно, для обоих классов генерировались vtable-ы с одинаковыми link-овочными именами (что-нибудь типа _message_box_t_vtable, зависит от компилятора). Но из всех одноимённых vtable-ов в финальном бинарнике должен остаться только один. До поры до времени был Visual C++, его linker протаскивал в финальный бинарник vtable нужного класса, и всё работало нормально. Потом был GCC, его linker протаскивал в финальный бинарник vtable ненужного класса, поэтому нужный класс жил с чужим vtable-ом (своего тёзки). Это естественно глючило, так проблема и обнаружилась, ненужный класс был убран, и всё заработало. То есть в данной ситуации Visual-овский linker оказался то ли умнее, то ли просто удачливее, чем GCC-шный linker. Короче, бойтесь нарушения ODR. Или переходите на более современный язык, который не позволит в одном namespace-е иметь 2 класса с одинаковыми именами :). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.10.2016, 01:53 |
|
||
|
Как я люблю gcc
|
|||
|---|---|---|---|
|
#18+
Пётр Седов, А)Подтверждаю, это еще одна "фича" gcc - ld - просто берется первая функция с нужным именем по порядку объектников в командной строке линкера, остальные не проверяются. Побочный эффект - если у вас объектник указан до использующего его функции другого, получишь ошибку линковки. Особенно доставляет, если есть циклические зависимости. Раньше вроде MS-линкер обнаруживал дублирование и ругался, может дело в классах. Б) Сразу добавлю в темку - после смены версии вырос размер исполняемого файла. Для обычного helloworld для проверки - в 6 раз. Посмотрел в .map - ОМГ сколько мусора, и фиг разберешься что зачем. Справедливости ради, то если разберешься, то можно ручками сделать скрипт линкера с отбрасыванием чего тебе ненужного, вроде размотки стека исключений для .c программ (я еще не разобрался) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.10.2016, 11:13 |
|
||
|
Как я люблю gcc
|
|||
|---|---|---|---|
|
#18+
SiemarglРаньше вроде MS-линкер обнаруживал дублирование и ругался, может дело в классах.С vtable-ами дублирование иногда неизбежно. Если например есть исходники: message_box.h Код: plaintext 1. 2. 3. 4. 5. 1.cpp Код: plaintext 1. 2. 2.cpp Код: plaintext 1. 2. 3.cpp Код: plaintext 1. 2. то vtable класса message_box_t будет во всех 3-ёх файлах (1.o, 2.o, 3.o для GCC; 1.obj, 2.obj, 3.obj для Visual C++). Linker протащит в финальный бинарник только один vtable. Но в данном случае всё нормально, потому что нет нарушения ODR. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.10.2016, 14:39 |
|
||
|
Как я люблю gcc
|
|||
|---|---|---|---|
|
#18+
А какой другой вы тогда посоветуете? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.11.2016, 00:04 |
|
||
|
Как я люблю gcc
|
|||
|---|---|---|---|
|
#18+
+1 assert'ы не удаляются в релизной сборке без явно указанного NDEBUG +2 std::thread в сборке i686-6.2.0-win32-sjlj-rt_v5-rev1 отсутствует а в сборке i686-6.2.0-posix-dwarf-rt_v5-rev1 работает через жо - thread.join() не гарантирует ожидания конца, как обязана ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.01.2017, 01:09 |
|
||
|
Как я люблю gcc
|
|||
|---|---|---|---|
|
#18+
В архитектуре x32 не использует AVX, хотя ему явно сказано >-m32 -O2 -march=core-avx2 -mtune=core-avx2 Похоже, что работа ведется только для x86-64 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.01.2017, 01:26 |
|
||
|
Как я люблю gcc
|
|||
|---|---|---|---|
|
#18+
SiemarglВ архитектуре x32 не использует AVX, хотя ему явно сказано >-m32 -O2 -march=core-avx2 -mtune=core-avx2 Похоже, что работа ведется только для x86-64 Не совсем так. Просто надо ручками дополнительно писать -mfpmath=sse ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.01.2017, 02:20 |
|
||
|
Как я люблю gcc
|
|||
|---|---|---|---|
|
#18+
Siemargl+1 assert'ы не удаляются в релизной сборке без явно указанного NDEBUG У МС тоже, но NDEBUG автоматом добавлен в дефайны релиза Код: plaintext 1. 2. 3. 4. 5. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.01.2017, 07:14 |
|
||
|
Как я люблю gcc
|
|||
|---|---|---|---|
|
#18+
Siemargl+1 assert'ы не удаляются в релизной сборке без явно указанного NDEBUGНе очень, правда, понятно почему вас это удивляет и почему макрос препроцессора должен зависеть от типа сборки??? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.01.2017, 09:29 |
|
||
|
Как я люблю gcc
|
|||
|---|---|---|---|
|
#18+
SiemarglЭто мерзкое недоделанное кривое поделие, с которым приходится работать, т.к местами кроме него ничего нет. . Ты имеешь в виду GCC в режиме C, или G++ ( C++ компилятор) , или оба ? Уточни, пожалуйста. Siemargl///4 Который раз твердили миру, -О3 не работает уже 10 лет. Если ваша программа крашится, нужно откатиться на -О2, а лучше и не пробовать. Последний раз - мы тут на форуме гоняли рейтрейсинг, живой пример. У меня работает -O3 на моём проекте, вполне всё ОК. Четыре года назад я работал на GCC на проекте на чистом C, с -O3 всё также работало адекватно. К тому же, -O3 -- комплекный параметр, он включает, как я понимаю, несколько оптимизаций, и, если что-то и не работает, надо говорить о каждой отдельно, а не о всём вместе. О проблемах Win-версии лучше всего писать основному мейнтейнеру , niXman-у, сюда http://www.rsdn.org/account/info/75665 И да, GCC -- не самый быстрый в мире компилятор, а fork на винде работает долго... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.01.2017, 12:37 |
|
||
|
Как я люблю gcc
|
|||
|---|---|---|---|
|
#18+
SiemarglПётр Седов, А)Подтверждаю, это еще одна "фича" gcc - ld - просто берется первая функция с нужным именем по порядку объектников в командной строке линкера, остальные не проверяются. Так любой линкер так и должен работать! То, что ты нарушаешь ODR -- это ТВОИ проблемы! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.01.2017, 12:52 |
|
||
|
Как я люблю gcc
|
|||
|---|---|---|---|
|
#18+
Siemargl+1 assert'ы не удаляются в релизной сборке без явно указанного NDEBUG Родной , так И НЕ ДОЛЖНЫ ОНИ УДАЛЯТЬСЯ без NDEBUG. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.01.2017, 12:53 |
|
||
|
Как я люблю gcc
|
|||
|---|---|---|---|
|
#18+
SiemarglСтруктурка передается параметром чужим функциям и соответственно, чувствительна к выравниванию. Так вот, структурка до 98 байт - не выравнивается, т.е ее размер соответствует сумме мемберов. А вот на 98байте компилятору ну просто очень нужно выровнять на оффсет 4. Я конечно понимаю, что он ничего не должен, но ожидаю предсказуемого поведения в сходных случаях. как все печально-то... по правде говоря существует гласное ABI правило - ничего сложнее ordinal типов (максимум 8 байт) не передавать, особенно чужим функциям. и функции с больше чем 3-мя параметрами уже страшное зло (их невозможно протестировать - слишком много вариантов получается в матрице тестовых значений). уже на 16 байтах начинаются чудеса с вовлечением XMM регистров и прочей несовместимости. а тут ты передаешь over 98 байт, и спрашивается в задаче, кто ССЗБ ? Будь как все, передавай указатель на свою копию в стеке, конечный эффект будет такой-же. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.01.2017, 13:13 |
|
||
|
Как я люблю gcc
|
|||
|---|---|---|---|
|
#18+
Basil A. SidorovSiemargl+1 assert'ы не удаляются в релизной сборке без явно указанного NDEBUGНе очень, правда, понятно почему вас это удивляет и почему макрос препроцессора должен зависеть от типа сборки???Да, и вправду, похоже меня IDE разбаловали, которые сами добавляют. MasterZivSiemarglПётр Седов, А)Подтверждаю, это еще одна "фича" gcc - ld - просто берется первая функция с нужным именем по порядку объектников в командной строке линкера, остальные не проверяются. Так любой линкер так и должен работать! То, что ты нарушаешь ODR -- это ТВОИ проблемы!Ну не так - он должен выругаться об неоднозначности, а не линковать что первое попало. dbpatch..бред про ХММ убран... ...а тут ты передаешь over 98 байт, и спрашивается в задаче, кто ССЗБ ? Будь как все, передавай указатель на свою копию в стеке, конечный эффект будет такой-же.Я и передаю по указателю. Какая разница, если выравнивание навернуто. Так так, похоже про thread.join() я соврал - у меня было больше потоков, чем я думал - корректно работает. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.01.2017, 18:11 |
|
||
|
Как я люблю gcc
|
|||
|---|---|---|---|
|
#18+
locked-О2 в продакшене использовать нельзя. -О3 - а это что такое?? Если хочется использовать -О2 можно купить самую простую версию интеловского компайлера. Одну лицензию и поставить ее на билд-бокс. Особенно если результат идет в продакшен. White Owl....Единственный случай когда удобно иметь упакованную структуру это если ты ее собираешься по сети кидать и это заранее известный формат. Ну или файл(ы) данных за-mmap-лен(ы). А для сети можно сделать сериализацию. Ибо может влиять енднесс. Почему нельзя использовать -O2 кто-нибудь скажет? Кроме того, что дебажить неудобно. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.01.2017, 18:12 |
|
||
|
Как я люблю gcc
|
|||
|---|---|---|---|
|
#18+
SiemarglНу не так - он должен выругаться об неоднозначности, а не линковать что первое попало. Не должен. Как раз по дизайну он должен брать первое из нескольких имен в порядке указания их библиотек. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.01.2017, 19:17 |
|
||
|
Как я люблю gcc
|
|||
|---|---|---|---|
|
#18+
Siemargldbpatch..бред про ХММ убран... ...а тут ты передаешь over 98 байт, и спрашивается в задаче, кто ССЗБ ? Будь как все, передавай указатель на свою копию в стеке, конечный эффект будет такой-же.Я и передаю по указателю. Какая разница, если выравнивание навернуто. Так так, похоже про thread.join() я соврал - у меня было больше потоков, чем я думал - корректно работает. бред про XMM? ну ну. а так, ты там выше писал дословно: > Структурка передается параметром чужим функциям и соответственно, чувствительна к выравниванию про указатель ты там ничего не писал. путаешься в показаниях? в остальном - ты опять, в 25 раз СЗЗБ. кто мешает выровнять структуру вручную, накидав туда dummy полей нужных длин и типов? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.01.2017, 19:38 |
|
||
|
Как я люблю gcc
|
|||
|---|---|---|---|
|
#18+
Anatoly MoskovskySiemarglНу не так - он должен выругаться об неоднозначности, а не линковать что первое попало. Не должен. Как раз по дизайну он должен брать первое из нескольких имен в порядке указания их библиотек.Где кстати прописано поведение линкера ? Ты как спец по стандартам, можешь знать ) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.01.2017, 20:11 |
|
||
|
Как я люблю gcc
|
|||
|---|---|---|---|
|
#18+
Илья, я категорически против правки моих постов, даже с благой целью улучшения этого убогого сайта. Ок ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.01.2017, 00:13 |
|
||
|
Как я люблю gcc
|
|||
|---|---|---|---|
|
#18+
SiemarglГде кстати прописано поведение линкера ? Ты как спец по стандартам, можешь знать ) Мне лень искать. Но алгоритм выбора функции среди одноименных четко описан. И к стандартам я никакого отношения не имею, а наоборот люблю частные случаи )) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.01.2017, 04:20 |
|
||
|
Как я люблю gcc
|
|||
|---|---|---|---|
|
#18+
SiemarglИлья, я категорически против правки моих постов, даже с благой целью улучшения этого убогого сайта. Ок ? Он оказал тебе услугу. По джентльменски, не став клеить стикер "Отредактировано". ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.01.2017, 10:02 |
|
||
|
Как я люблю gcc
|
|||
|---|---|---|---|
|
#18+
SiemarglИлья, я категорически против правки моих постов, даже с благой целью улучшения этого убогого сайта. Ок ? ОК, просто не давай повода... :-) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.01.2017, 12:18 |
|
||
|
Как я люблю gcc
|
|||
|---|---|---|---|
|
#18+
Anatoly MoskovskyМне лень искать. Но алгоритм выбора функции среди одноименных четко описан. В огороде бузина, а в Киеве — дядька. Какое отношение overload resolution имеет к выбору линкером символа из нескольких translation units? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.01.2017, 13:22 |
|
||
|
Как я люблю gcc
|
|||
|---|---|---|---|
|
#18+
Common LispКакое отношение overload resolution имеет к выбору линкером символа из нескольких translation units? Никакое. Это вы домыслили про перегрузку )) А вот например то про что я говорил: 1) .cpp с функцией f() возвращающей 1 2) .cpp с функцией f() возвращающей 2 с атрибутом weak 3) программа собранная с 1 и 2 Какая из f будет взята четко определено. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.01.2017, 06:13 |
|
||
|
Как я люблю gcc
|
|||
|---|---|---|---|
|
#18+
Anatoly MoskovskyКакая из f будет взята четко определено. Лично я ещё с первой своей встречи с С помню, что порядок указания объектных файлов и библиотек в командной строке линкера имеет очень большое значение. Именно потому, что функция берётся из первой встреченной. Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.01.2017, 13:28 |
|
||
|
Как я люблю gcc
|
|||
|---|---|---|---|
|
#18+
Что то у меня не получается воспроизвести, хотя точно был какой то казус D:\VSProjects\ambigui>cl main.cpp tru1.cpp tru2.cpp Microsoft (R) 32-bit C/C++ Optimizing Compiler Version 13.10.3077 for 80x86 Copyright (C) Microsoft Corporation 1984-2002. All rights reserved. main.cpp tru1.cpp tru2.cpp Generating Code... Microsoft (R) Incremental Linker Version 7.10.3077 Copyright (C) Microsoft Corporation. All rights reserved. /out:main.exe main.obj tru1.obj tru2.obj tru2.obj : error LNK2005: "int __cdecl fnx(void)" (?fnx@@YAHXZ) already defined in tru1.obj main.exe : fatal error LNK1169: one or more multiply defined symbols found D:\VSProjects\ambigui>gcc main.cpp tru1.cpp tru2.cpp E:\windows\TEMP\ccJmDlXv.o:tru2.cpp:(.text+0x0): multiple definition of `fnx()' E:\windows\TEMP\ccnEcvSD.o:tru1.cpp:(.text+0x0): first defined here collect2.exe: error: ld returned 1 exit status ==============вариант с библиотечной ф-цией================= D:\VSProjects\ambigui>gcc main.cpp tru1.cpp atexit2.cpp E:\windows\TEMP\ccCiW5FA.o:atexit2.cpp:(.text+0x0): multiple definition of `atexit' D:/codeblocks-16.01/MinGW/bin/../lib/gcc/mingw32/4.9.2/../../../crt2.o:crt1.c:(.text+0x2c0): first defined here collect2.exe: error: ld returned 1 exit status D:\VSProjects\ambigui>gcc --version gcc (tdm-1) 4.9.2 Copyright (C) 2014 Free Software Foundation, Inc. This is free software; see the source for copying conditions. There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.01.2017, 19:47 |
|
||
|
Как я люблю gcc
|
|||
|---|---|---|---|
|
#18+
Воспроизводится для С, но не CPP. Причем msvc2003 и gcc работают в этом случае одинаково. Век живи, век учись ( ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.01.2017, 12:47 |
|
||
|
Как я люблю gcc
|
|||
|---|---|---|---|
|
#18+
Вот. Как раз повторно наткнулся на грабли 2) Претензии: 1)Полный бордель внутри каталога gcc -include лежат в gcc\include, но для С++ есть своя версия, лежит gcc\lib\gcc\mingw32\4.9.2\include\c++ -ar.exe, as.exe и еще пяток хранятся в двух копиях в разных подкаталогах -lib частично лежат в gcc\lib, но немного в gcc\mingw32\4.9.2 2)ИЧСХ, обычно компилятор сам знает, где искать свое барахло, но иногда.... Ну не хочет он, ****, при сборке dll видеть -lgcc, ни сам, ни если ему под нос положить. Решил: Помогает только положить под нос и сказать ld ... libgcc.a 3)Статическая сборка как минимум под Windows потребует замену gcc libc, Но динамическую же сборку - могу записать в плюс: сборку с-программ с msvcrt.dll без лишних зависимостей вообще, а С++ рантайм пару мегабайт и без геморроя с манифестами и версиями. 4)Одна и так же версия компилятора, с одинаковым makefile порождает библиотеки разного размера, если компилить под Win и под Lin. Страшно брать и линковать с разных мест сборки, но вроде работает. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.01.2017, 00:19 |
|
||
|
Как я люблю gcc
|
|||
|---|---|---|---|
|
#18+
Siemargl1)Полный бордель внутри каталога gcc И? Кто тебе виноват, что ты используешь кривую и неродную систему, с оберточным костылем? Пересаживайся на Linux, где gcc мейснтрим, там будет тебе феншуй по полной Siemargl2) Windows Windows Windows Siemargl3)Статическая сборка как минимум под Windows потребует Ну что за детский сад, штаны на лямках! Под Windows есть clang/C2 в составе MS VS 2015, если так уж сильно хочется последних C++ ништяков. Какой смысл сидеть и колоться об реально никем не поддерживамую платформу? Siemargl4)Одна и так же версия компилятора, с одинаковым makefile порождает библиотеки разного размера, если компилить под Win и под Lin. Страшно брать и линковать с разных мест сборки, но вроде работает. Вообще жесть. Ты поди и про отличия в ABI еще не почитал нигде? https://en.wikipedia.org/wiki/X86_calling_conventions#x86-64_calling_conventions Ах ну да, про XMM регистры было зачтено за бред, я забыл :):) Может стоит в Java мир уйти, там-то ничего не отличается? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.01.2017, 03:42 |
|
||
|
Как я люблю gcc
|
|||
|---|---|---|---|
|
#18+
dbpatch ... Коллега dbpatch суров, но справедлив... :-) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.01.2017, 14:04 |
|
||
|
Как я люблю gcc
|
|||
|---|---|---|---|
|
#18+
Собственно, весть же топик не совсем про GCC, а про его порт на Win, именуемый MinGW, так ? Мы должны это подчеркнуть! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.01.2017, 14:06 |
|
||
|
Как я люблю gcc
|
|||
|---|---|---|---|
|
#18+
dbpatchSiemargl1)Полный бордель внутри каталога gcc И? Кто тебе виноват, что ты используешь кривую и неродную систему, с оберточным костылем? Пересаживайся на Linux, где gcc мейснтрим, там будет тебе феншуй по полнойНесмотря на то, что я в 96% случаев пользуюсь MingGW, вполне в состоянии посмотреть и в "родной" системе (под рукой Ubuntu14): include находим в /usr/include, но часть лежит в /usr/lib/gcc/x86_64-linux-gnu/4.8/include бинарники лежат в /usr/bin, но cc1 и cc1plus лежит в /usr/lib/gcc/x86_64-linux-gnu/4.8/ Практически такой же бардак (только либы (.a) вместе лежат, что впрочем (2) лечит) dbpatchSiemargl3)Статическая сборка как минимум под Windows потребует Ну что за детский сад, штаны на лямках! Под Windows есть clang/C2 в составе MS VS 2015, если так уж сильно хочется последних C++ ништяков. Какой смысл сидеть и колоться об реально никем не поддерживаемую платформу?Ага, Clang под Windows только вышел, никем не используется (а еще он в CBuilder10 есть). И уровень поддержки там отличается от gcc. /sarcasm Кроме того, я часто пользуюсь кросс-компилятором, где выбора у меня просто нет. dbpatchSiemargl4)Одна и так же версия компилятора, с одинаковым makefile порождает библиотеки разного размера, если компилить под Win и под Lin. Страшно брать и линковать с разных мест сборки, но вроде работает. Вообще жесть. Ты поди и про отличия в ABI еще не почитал нигде? https://en.wikipedia.org/wiki/X86_calling_conventions#x86-64_calling_conventions Ах ну да, про XMM регистры было зачтено за бред, я забыл :):)ABI тут ни при чем, целевой таргет одинаковый, как и версии компилятора. Про XMM в привязке к передаче параметров-структур и действительно бред. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.01.2017, 14:57 |
|
||
|
Как я люблю gcc
|
|||
|---|---|---|---|
|
#18+
Siemargldbpatchпропущено... И? Кто тебе виноват, что ты используешь кривую и неродную систему, с оберточным костылем? Пересаживайся на Linux, где gcc мейснтрим, там будет тебе феншуй по полнойНесмотря на то, что я в 96% случаев пользуюсь MingGW, вполне в состоянии посмотреть и в "родной" системе (под рукой Ubuntu14): include находим в /usr/include, но часть лежит в /usr/lib/gcc/x86_64-linux-gnu/4.8/include бинарники лежат в /usr/bin, но cc1 и cc1plus лежит в /usr/lib/gcc/x86_64-linux-gnu/4.8/ И? у тебя в системе может стоять одновременно и 4.8, и 5.3. Как нужно разделять, озвучишь? И тебя что, заставляют в makefile эти пути вручную прописывать? Да неужели? SiemarglАга, Clang под Windows только вышел, никем не используется (а еще он в CBuilder10 есть). И уровень поддержки там отличается от gcc. /sarcasm где там? в clang или msvc? насколько я знаю, в ms поддержка очень оперативная, с ними реально приятно работать SiemarglКроме того, я часто пользуюсь кросс-компилятором, где выбора у меня просто нет. тем более странно сидеть под виндой. кто мешает взгромоздить актуальный linux в одну из систем виртуализации? там даже есть интеграция с visual studio, есть плагин соотвествующий (вернее пара - свой и wingdb) - сидишь в нормальной IDE отлаживаешь линукс процессы, красота SiemarglПро XMM в привязке к передаче параметров-структур и действительно бред. Нет не бред, структура (не указатель, а структура целиком) длиной до 16 байт при передаче упаковывается в 128 битный регистр, известный факт-фича. Но ты тогда не смог пояснить, что передаешь именно указатель, и кто тебе виноват? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.01.2017, 18:53 |
|
||
|
Как я люблю gcc
|
|||
|---|---|---|---|
|
#18+
SiemarglABI тут ни при чем, целевой таргет одинаковый, как и версии компилятора. про кросскомпиляцию ты ничего не говорил, тут за тебя всегда должны догадываться? а так, в мире существует еще и link time optimization, версии линкера тоже одинаковые, и у компиляторов, прям тютелька в тютельку, и номера релизов вплоть до номеров ревизий совпадают и собраны они из единого репозитория? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.01.2017, 18:58 |
|
||
|
Как я люблю gcc
|
|||
|---|---|---|---|
|
#18+
dbpatch, Читать ты не умеешь, по делу сказать тоже не можешь. Так что отвечать тебе смысла не вижу. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.01.2017, 19:17 |
|
||
|
Как я люблю gcc
|
|||
|---|---|---|---|
|
#18+
Кстати, не уточнил. Весь этот файловый бардак обычно не заметен. Пока не нужно использовать -nostdlib, который используется в основном при кросс-компиляции. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.01.2017, 19:33 |
|
||
|
Как я люблю gcc
|
|||
|---|---|---|---|
|
#18+
Siemargl include находим в /usr/include, но часть лежит в /usr/lib/gcc/x86_64-linux-gnu/4.8/include И у этого есть очень простое объяснение. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.01.2017, 09:28 |
|
||
|
Как я люблю gcc
|
|||
|---|---|---|---|
|
#18+
Anatoly MoskovskyКакая из f будет взята четко определено. А какая будет weak где определено? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.01.2017, 09:34 |
|
||
|
Как я люблю gcc
|
|||
|---|---|---|---|
|
#18+
Siemargldbpatch, Читать ты не умеешь, по делу сказать тоже не можешь. Так что отвечать тебе смысла не вижу. ты плакал что размеры бинариков собранные отличаются при кросскомпиляции (как мы выяснили потом) под разными хост платформами. тебе задали простой вопрос - совпадают ли версии компилятора и линкера. и библиотек (код из статичных библиотек очень даже может инлайниться). и знаешь ли ты про LTO вместо этого ты развесил обиженно губы, аки девочка какая-то. видно ты и про LTO не в курсе, и как версии срававать - тоже не знаешь. смешно, кисо обиделось. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.01.2017, 11:31 |
|
||
|
Как я люблю gcc
|
|||
|---|---|---|---|
|
#18+
Следующее чудо - не gcc, но друг его GNU make. Перестал собираться элементарный пример. Возможно, сменилась версия make c 3.82 на 3.82.90, но не факт, что это причина Перестало подхватываться правило (а работало раньше) Код: plaintext 1. 2. Причем, в make есть builtin правила - и оно подхватывает CFLAGS, но не INCLUDES, так что выглядело очень похоже на верную строку. <tab> имеется ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.02.2017, 20:14 |
|
||
|
Как я люблю gcc
|
|||
|---|---|---|---|
|
#18+
Пилять, рядом такой же файл обрабатывается. В общем, если Код: plaintext 1. 2. 3. то правило обнаруживается и работает. А если Код: plaintext 1. 2. то не работает =) Еще можно убрать вообще зависимость от SOURCES в неявном правиле. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.02.2017, 20:37 |
|
||
|
Как я люблю gcc
|
|||
|---|---|---|---|
|
#18+
Вот и всплыло. Как я изначально выставлял претензию на "качество и понятность генерируемого ассемблера", так оно и поплыло Сгенерированный странным образом код gcc "ломает" работу Intel SkyLake Hyper-Threading https://habrahabr.ru/post/332552/ TL:DR gcc генерирует 64-битный код, заполняя иногда только часть регистра, т.е не rax, rbx,... а AH, BH,... Это иногда ломает ноги HT с непредсказуемым поведением и глюками ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.07.2017, 09:53 |
|
||
|
Как я люблю gcc
|
|||
|---|---|---|---|
|
#18+
Siemargl, используешь MSYS2 ? Попробуй его в связке с NetBeans IDE (хоть и тормознутая из-за применения Java, но очень грамотная IDE). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.07.2017, 10:39 |
|
||
|
Как я люблю gcc
|
|||
|---|---|---|---|
|
#18+
SiemarglСгенерированный странным образом код gcc "ломает" работу Intel SkyLake Hyper-Threading ИМХО GCC не виноват что интел кривой проц выпустил. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.07.2017, 10:46 |
|
||
|
Как я люблю gcc
|
|||
|---|---|---|---|
|
#18+
Еще пару клевых моментов 1. tellg /seekg не работает для _одного и того же_ текстового файла (это еще объяснимо) 2. если мы какой то файл через ifstream открываем в бинарной моде, вывод cout наворачивается полностью (а вот это необъяснимо) gcc 6.2 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.09.2017, 03:22 |
|
||
|
Как я люблю gcc
|
|||
|---|---|---|---|
|
#18+
2. тоже объяснимо - в строки попадает \r и ес-но вывод на консоль затирается ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.09.2017, 11:18 |
|
||
|
Как я люблю gcc
|
|||
|---|---|---|---|
|
#18+
Закодь пока на fopen/fread а с потоками потом разгребем. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.09.2017, 13:57 |
|
||
|
Как я люблю gcc
|
|||
|---|---|---|---|
|
#18+
Dima TSiemarglСгенерированный странным образом код gcc "ломает" работу Intel SkyLake Hyper-Threading ИМХО GCC не виноват что интел кривой проц выпустил. работа с частью регистра - сомнительная оптимизация тем не менее ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.09.2017, 14:49 |
|
||
|
Как я люблю gcc
|
|||
|---|---|---|---|
|
#18+
SiemarglГде кстати прописано поведение линкера ?Линкер или не линкер — это деталь реализации, а про нарушения условий определения одного и того же класса в разных единицах трансляции сказано http://eel.is/c draft/basic.def.odr#6.sentence-4 If the definitions of D do not satisfy these requirements, then the behavior is undefined.undefined behavior не требует диагностических сообщений http://eel.is/c draft/intro.compliance#def:diagnosable_rules The set of diagnosable rules consists of all syntactic and semantic rules in this document except for those rules containing an explicit notation that “no diagnostic is required” or which are described as resulting in “undefined behavior”. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.10.2017, 05:19 |
|
||
|
Как я люблю gcc
|
|||
|---|---|---|---|
|
#18+
Dima TSiemarglСгенерированный странным образом код gcc "ломает" работу Intel SkyLake Hyper-Threading ИМХО GCC не виноват что интел кривой проц выпустил. Да GCC вообще ни в чём не виноват. GCC — это такое произведение искусства на тему "как не нужно делать". ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.10.2017, 05:59 |
|
||
|
Как я люблю gcc
|
|||
|---|---|---|---|
|
#18+
Очередное обновление. gcc6.2/win64 Проблема - нестабильность кода, недетерминированная компиляция. Вносим изменения в программу, например закомментируем неиспользуемые функции или вносим в них мелкие изменения. Рабочий код - меняется случайным образом (перестановка использования регистров, стека, перестановка операций итп), наблюдалось замедление до 10%. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.07.2018, 11:00 |
|
||
|
Как я люблю gcc
|
|||
|---|---|---|---|
|
#18+
Еще +проблема Бинарник, собранный gcc 6.2, не запускается под Win2008SBS (ядро от Vista). Где то похерили совместимость. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.07.2018, 11:10 |
|
||
|
Как я люблю gcc
|
|||
|---|---|---|---|
|
#18+
Siemargl, что показывает таблица импорта этого бинарника? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.07.2018, 10:12 |
|
||
|
Как я люблю gcc
|
|||
|---|---|---|---|
|
#18+
rdb_devSiemargl, что показывает таблица импорта этого бинарника?ничего особенного, kernel32.dll и msvcrt.dll ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.07.2018, 11:19 |
|
||
|
Как я люблю gcc
|
|||
|---|---|---|---|
|
#18+
Siemargl, попробуй положить рядом с исполняемым файлом библиотеку msvcrt.dll с той системы, на которой компилировалась прога. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.07.2018, 14:29 |
|
||
|
Как я люблю gcc
|
|||
|---|---|---|---|
|
#18+
SiemarglОчередное обновление. gcc6.2/win64 Проблема - нестабильность кода, недетерминированная компиляция. Вносим изменения в программу, например закомментируем неиспользуемые функции или вносим в них мелкие изменения. Рабочий код - меняется случайным образом (перестановка использования регистров, стека, перестановка операций итп), наблюдалось замедление до 10%. Обновлю чуть уточнениями, пока не утонуло в памяти. Один и тот же исходник (используется __m128, никакой системно-зависимой хрени). Но результат компиляции работает в 3-4 раза! медленнее если собран gcc под Linux. Опции одинаковы. Платформа компилятор время сWin64 gcc 6.2 12FreeBSD64 Clang6 12Linux64(Ubuntu14) gcc6.? 38Linux64(Ubuntu18) gcc7.3 38Linux64(Ubuntu14) Clang6 11 rdb_devSiemargl, попробуй положить рядом с исполняемым файлом библиотеку msvcrt.dll с той системы, на которой компилировалась прога.Бесполезно, под Vista32 вылетает при запуске. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.07.2018, 08:28 |
|
||
|
|

start [/forum/topic.php?all=1&fid=57&tid=2017801]: |
0ms |
get settings: |
8ms |
get forum list: |
14ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
47ms |
get topic data: |
12ms |
get forum data: |
2ms |
get page messages: |
96ms |
get tp. blocked users: |
1ms |
| others: | 279ms |
| total: | 467ms |

| 0 / 0 |
