170 похожих чатов

Подскажите такой вопрос. Кому-нибудь приходилось завозить стандарт C++20 под Windows

7? Как это сделать нынче вообще?

39 ответов

27 просмотров

Ты собирать на win7 хочешь с 20 стандартом?

eugene-martein Автор вопроса
Vadim Ushakov
Ты собирать на win7 хочешь с 20 стандартом?

Мне надо разрабатывать на Win10, но так, чтобы оно работало на Win7 тоже.

Я тут недавно ради лулзов и экспериментов завёл 20-й стандарт на WindowsXP. На 7-ке тоже должно заработать.

eugene-martein Автор вопроса

И как ты ради лулзов его завёл? Я упрашивал начальство, чтобы оно позволило отказаться поддержки XP, а ты ради лулзов это сделал.

А много мест использования с++20, не проще ли будет отказаться и снизить хотя бы до 17 стандарта?

eugene-martein Автор вопроса
Vadim Ushakov
А много мест использования с++20, не проще ли буде...

Да, можно остаться и на 11-ом. Это уже лично моя хотелка, а не требования проекта. Хочу изучать C++20, но так чтобы применять ещё и в работе.

eugene martein
И как ты ради лулзов его завёл? Я упрашивал началь...

Очень просто. 1. Пишешь прогу кросс-платформенно, то есть, чтобы она могла работать и под виндами и под линуксом. 2. Чтобы не запариваться со сборкой и там и там - используешь cmake 3. Ставишь в Linux mingw-w64 (есть в убунтовских репах), и просто говоришь cmake в качестве C++-ного компилятора использовать 'i686-w64-mingw32-g++-posix', добавив (CMAKE_EXE_LINKER_FLAGS "-static -static-libgcc -static-libstdc++". 4. Собирашь прогу под винду в линуксе. Правда тут стоит уточнить одну вешь. у меня гуя в проге нет, она чисто консольная. Но с гуем тоже можно справится. Есть ещё mxe

eugene martein
Мне надо разрабатывать на Win10, но так, чтобы оно...

стандарт с++ никак не связан с версией Win

eugene-martein Автор вопроса
S.E.
Очень просто. 1. Пишешь прогу кросс-платформенно, ...

Всё в этом подходе прекрасно кроме простой программы с кодом: std::cout << _WIN32_WINNT << std::endl;, которая высрет в консоль 0x0A00

eugene martein
Да, можно остаться и на 11-ом. Это уже лично моя х...

На сайте МС написано, что последняя VS, поддерживаемая на XP - 2019 с 16.7 https://learn.microsoft.com/en-us/cpp/windows/latest-supported-vc-redist?view=msvc-170 вот тут фичи описаны по версиям компиля, частичная поддержка С++20 там есть: https://learn.microsoft.com/en-us/cpp/overview/visual-cpp-language-conformance?view=msvc-170

eugene martein
Всё в этом подходе прекрасно кроме простой програм...

Ну, гм, хм. Согласен, такого дефайна нет. (Но кто мешает его определить в CMakeLists.txt? или в тулчен-файле?

eugene-martein Автор вопроса
S.E.
Ну, гм, хм. Согласен, такого дефайна нет. (Но кто ...

Он есть, но он не ограничивает использование вызовов WinAPI Win10

Стандарт c++ определяется компилятором а не операционной системой, на которой он работает. Следовательно для того чтобы тебе получить c++ с какого-то стандарта , тебе нужен компилятор, поддерживающий это Стандарт. На Windows 7 можно собрать разные компиляторы, поддерживающие этот Стандарт , и даже можно поставить компилятор на другую машину, например Windows 10, и там собирать приложение под Windows 7

eugene martein
Он есть, но он не ограничивает использование вызов...

Мне он кстати выдал 1282, что равняется 0x502 возможно это связано с тем, что я щас в 10-ке под веслом. Надо будет потом на живой хп-хе проверить

Ilya Zviagin
Стандарт c++ определяется компилятором а не операц...

Ну есть такие интересные вещи в общем... https://github.com/microsoft/STL/blob/a62109595b6d89e08172fdf4beb75a2670fe0cc9/stl/src/atomic_wait.cpp#L138

S.E.
Мне он кстати выдал 1282, что равняется 0x502 возм...

это вообще макрос, и определяется на этапе компиляции

я в курсе. Просто майки в всл-е могли mingw тоже подшаманить. Но не, я глянул, 0x502 это вполне себе #define _WIN32_WINNT_WS03 0x0502 // Windows Server 2003 То есть в теории наносить ограничения он должен.

S.E.
я в курсе. Просто майки в всл-е могли mingw тоже п...

он влияет на набор доступных API в windows.h

eugene martein
Всё в этом подходе прекрасно кроме простой програм...

Потому что это "простая программа" даже не удовлетворяет первый пункт?

eugene-martein Автор вопроса
Egor Kulebyakin
Потому что это "простая программа" даже не удовлет...

Нет никаких ограничений у подключаемых библиотек вызывать API-функции, которых нет на целевой платформе, так как они объявлены в заголовочных файлах компилятора, но в рантайме их может не оказаться. По этой простой причине, например, Qt 6.x с лихвой может собраться таким компилятором, но к величайшему удивлению не будет работать на Windows 7.

eugene martein
Нет никаких ограничений у подключаемых библиотек в...

Начнём с того, что заголовочные файлы компилятора и их содержимое никем не специфицированы и могут меняться как угодно без уведомления. Во-вторых, использование зарезервированных символов в коде — практика как минимум спорная. Ну и в-третьих, где, например, у того же clang в заголовках символ _WIN32_хотьчтонибудь?

eugene-martein Автор вопроса
Alexander "Ternvein" Isaev
Начнём с того, что заголовочные файлы компилятора ...

Да, сторонние библиотеки могут и не проверять никаких дефайнов, они просто юзают системные API напрямую без проверок, чем собственно может заниматься и собранное этим компилятором приложение, как в примере с atomic wait.

eugene martein
Да, сторонние библиотеки могут и не проверять ника...

Могут. Что автоматически делает их не кроссплатформенными. И, соответственно, не проходящими даже первый пункт.

eugene martein
STL не кроссплатформенна.

STL не используется уже много лет, если что. А если вы про std, то пишете ерунду.

Хоть 7, хоть Хп. Качаем последнюю студию, которая это поддерживает. И там пишем. Если всё-таки хотим чего-то большего, то можно взять последний clang, но использовать sdk целевой версии. Таким образом можно получить иногда чуть больше. Ну или лет через 10 также спокойно использовать последний clang, а sdk всё от той же старой 2019 студии

eugene-martein Автор вопроса
Michael Chambers
Хоть 7, хоть Хп. Качаем последнюю студию, которая ...

Свежо питанию, да серется с трудом. Без плясок с бубном вокруг той же 2019-ой студии, копаний в реестре, переносом частей из старых студий не обойдётся, если вдруг приспичит к ней прикрутить Windows 7.1 SDK.

eugene martein
Свежо питанию, да серется с трудом. Без плясок с б...

Возможно придется что-то сделать да. Но возможность все же остаётся

eugene-martein Автор вопроса
Michael Chambers
Возможно придется что-то сделать да. Но возможност...

Ну и опять же, речи в таком случае про C++20 уже не идёт.

eugene martein
Ну и опять же, речи в таком случае про C++20 уже н...

Всё ещё идёт. Просто на уровне стдлибы будет то что есть сейчас и всё. Все новое, что заедет в компилятор, будет у вас

eugene-martein Автор вопроса
eugene-martein Автор вопроса
Michael Chambers
Что это?

Вывод тулкита Windows 7.1 SDK при включении современного компилятора 2022-ой студии. С ним возможна сборка только на компиляторе от 2010-ой студии.

eugene martein
Вывод тулкита Windows 7.1 SDK при включении соврем...

Так речь шла про использование clang в таком сценарии, а не про msvc

eugene martein
Вывод тулкита Windows 7.1 SDK при включении соврем...

Вообще, не понял что это. Под семёрку и 2019 всё успешно собирает. Собственно и кусок 20 стандарта там есть, и он включается для семёрки успешно

eugene martein
Нет никаких ограничений у подключаемых библиотек в...

Какое апи? Какие функции? Вы свой пример забыли?

Похожие вопросы

Обсуждают сегодня

а через ESC-код ?
Alexey Kulakov
29
30500 за редактор? )
Владимир
47
Чёт не понял, я ж правильной функцией воспользовался чтобы вывести отладочную информацию? но что-то она не ловится
notme
18
У меня есть функция где происходит это: write_bit(buffer, 1); write_bit(buffer, 0); write_bit(buffer, 1); write_bit(buffer, 1); write_bit(buffer, 1); w...
~
13
Недавно Google Project Zero нашёл багу в SQLite с помощью LLM, о чём достаточно было шумно в определённых интернетах, которые сопровождались рассказами, что скоро всех "ибешни...
Alex Sherbakov
5
program test; {$mode delphi} procedure proc(v: int32); overload; begin end; procedure proc(v: int64); overload; begin end; var x: uint64; begin proc(x); end. Уж не знаю...
notme
6
Как передать управляющий символ в открытую через CreateProcess консоль? Собсна, есть процедура: procedure TRedirectThread.WriteData(Data: OEMString); var Written: Cardinal;...
Serjone
6
Вот еще странный косяк, подскажите как бороться. Я git clone сделал себе всего embassy и примеры там запускаю. Всё хорошо. Но вот решил в cargo.toml зависимости не как в приме...
Lukutin R2AJP
1
вы делали что-то подобное и как? может есть либы готовые? увидел картинку нокода, где всё линиями соединено и стало интересно попробовать то же в ddl на lua сделать. решил с ч...
Victor
8
Ребят в СИ можно реализовать ООП?
Николай
33
Карта сайта