У меня есть существующий проект C++, который нормально компилируется с помощью msvc, и я пытаюсь скомпилировать его в Visual Studio 2022 с помощью LLVM (clang-cl). На данный момент я использую предварительную версию стандарта языка C++ ISO C++23, хотя я не думаю, что это необходимо, и предпочел бы C++20.
Установщик Visual Studio сообщает мне, что у меня есть «Компилятор C++ Clang для Windows (19.1.5)» и «Поддержка MSBuild для набора инструментов LLVM (clang-cl)».
Проект не компилируется, он генерирует сотни ошибки компиляции. Некоторые популярные из них:
E0020 идентификатор «__bf16» не определен (в avx512bf16intrin.h, avxintrin.h и других)
E0020 глобальная область действия не имеет «int8_t» (в cstdint, xutility, _msvc_minmax.hpp и другие)
Идентификатор E0020 SETJTMP_FLOAT128 не определен (в setjtmp.h)
Что мне нужно сделать, чтобы преодолеть трудности? Конечно, ответ прост и продублирован на SO, но я гуглил 3 или 4 часа и, очевидно, не нашел подходящих ключевых слов для этой проблемы.
Вот небольшой пример, который имеет большинство одинаковых ошибок компиляции. Я начал подозревать, что мои проблемы во многом связаны с vcl Агнера, поэтому я просто добавил пример кода его диспетчера в новый проект и сорвал куш ошибки компиляции. Обратите внимание: по сравнению с точным кодом Агнера я делаю некоторые незначительные изменения в файлах instrset.h и instrset_detect.cpp, чтобы поставить clang поверх MSC. Код Агнера имеет clang ниже MSC и отлично работает для компиляции в автономном clang, но не в Visual Studio clang. Исходные файлы instrset.h и instrset_detect.cpp Агнера сохраняются в подкаталоге vcl_agner. Если вы их используете, вы по-прежнему получаете большинство тех же ошибок.
https://drive.google.com/file/d/1IElPqw ... drive_link
Вот пример с глупо-простым кодом SIMD. Он будет генерировать все «ошибки» компиляции intellisense, но будет компилироваться и работать правильно. Мой реальный код и код, указанный выше, не скомпилируются, но фатальные ошибки сборки — это ошибки компоновщика, которые не происходят при компиляции в msvc, а только при компиляции в clang. Поэтому я полагаю, что мне следует сосредоточиться на ошибках ссылок.
#include
#include
//#include
//#define SIMD_SIZE_SPN 8
#define SIMD_SIZE_SPN 4
//#define SIMD_SIZE_SPN 2
int main() {
printf("\nhello ms clang\n");
double xarr[SIMD_SIZE_SPN] = {};
#if SIMD_SIZE_SPN == 8
__m512d vec1, vec2;
vec1 = _mm512_setr_pd(1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0);
vec2 = _mm512_setr_pd(8.0, 7.0, 6.0, 5.0, 4.0, 3.0, 2.0, 1.0);
vec1 = _mm512_mul_pd(vec1, vec2); //8, 14, 18, 20, 20, 18, 14, 8
_mm512_storeu_pd(xarr, vec1);
#elif SIMD_SIZE_SPN == 4
__m256d vec1, vec2;
vec1 = _mm256_setr_pd(1.0, 2.0, 3.0, 4.0);
vec2 = _mm256_setr_pd(4.0, 3.0, 2.0, 1.0);
vec1 = _mm256_mul_pd(vec1, vec2); //4, 6, 6, 4
_mm256_storeu_pd(xarr, vec1);
#else
__m128d vec1, vec2;
vec1 = _mm_setr_pd(1.0, 2.0);
vec2 = _mm_setr_pd(2.0, 1.0);
vec1 = _mm_mul_pd(vec1, vec2); //2, 2
_mm_storeu_pd(xarr, vec1);
#endif
printf("\nlast = %8.2f \n", xarr[SIMD_SIZE_SPN - 1]); //8, 4, 2
return 0;
}
Подробнее здесь: https://stackoverflow.com/questions/797 ... o-2022-cla
Как мне скомпилировать существующий проект MSVC с помощью компилятора Visual Studio 2022 Clang? ⇐ C++
Программы на C++. Форум разработчиков
1760638651
Anonymous
У меня есть существующий проект C++, который нормально компилируется с помощью msvc, и я пытаюсь скомпилировать его в Visual Studio 2022 с помощью LLVM (clang-cl). На данный момент я использую предварительную версию стандарта языка C++ ISO C++23, хотя я не думаю, что это необходимо, и предпочел бы C++20.
Установщик Visual Studio сообщает мне, что у меня есть «Компилятор C++ Clang для Windows (19.1.5)» и «Поддержка MSBuild для набора инструментов LLVM (clang-cl)».
Проект не компилируется, он генерирует сотни ошибки компиляции. Некоторые популярные из них:
E0020 идентификатор «__bf16» не определен (в avx512bf16intrin.h, avxintrin.h и других)
E0020 глобальная область действия не имеет «int8_t» (в cstdint, xutility, _msvc_minmax.hpp и другие)
Идентификатор E0020 SETJTMP_FLOAT128 не определен (в setjtmp.h)
Что мне нужно сделать, чтобы преодолеть трудности? Конечно, ответ прост и продублирован на SO, но я гуглил 3 или 4 часа и, очевидно, не нашел подходящих ключевых слов для этой проблемы.
Вот небольшой пример, который имеет большинство одинаковых ошибок компиляции. Я начал подозревать, что мои проблемы во многом связаны с vcl Агнера, поэтому я просто добавил пример кода его диспетчера в новый проект и сорвал куш ошибки компиляции. Обратите внимание: по сравнению с точным кодом Агнера я делаю некоторые незначительные изменения в файлах instrset.h и instrset_detect.cpp, чтобы поставить clang поверх MSC. Код Агнера имеет clang ниже MSC и отлично работает для компиляции в автономном clang, но не в Visual Studio clang. Исходные файлы instrset.h и instrset_detect.cpp Агнера сохраняются в подкаталоге vcl_agner. Если вы их используете, вы по-прежнему получаете большинство тех же ошибок.
https://drive.google.com/file/d/1IElPqwWVvifvLHBj94JmjOptmH9tgIGw/view?usp=drive_link
Вот пример с глупо-простым кодом SIMD. Он будет генерировать все «ошибки» компиляции intellisense, но будет компилироваться и работать правильно. Мой реальный код и код, указанный выше, не скомпилируются, но фатальные ошибки сборки — это ошибки компоновщика, которые не происходят при компиляции в msvc, а только при компиляции в clang. Поэтому я полагаю, что мне следует сосредоточиться на ошибках ссылок.
#include
#include
//#include
//#define SIMD_SIZE_SPN 8
#define SIMD_SIZE_SPN 4
//#define SIMD_SIZE_SPN 2
int main() {
printf("\nhello ms clang\n");
double xarr[SIMD_SIZE_SPN] = {};
#if SIMD_SIZE_SPN == 8
__m512d vec1, vec2;
vec1 = _mm512_setr_pd(1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0);
vec2 = _mm512_setr_pd(8.0, 7.0, 6.0, 5.0, 4.0, 3.0, 2.0, 1.0);
vec1 = _mm512_mul_pd(vec1, vec2); //8, 14, 18, 20, 20, 18, 14, 8
_mm512_storeu_pd(xarr, vec1);
#elif SIMD_SIZE_SPN == 4
__m256d vec1, vec2;
vec1 = _mm256_setr_pd(1.0, 2.0, 3.0, 4.0);
vec2 = _mm256_setr_pd(4.0, 3.0, 2.0, 1.0);
vec1 = _mm256_mul_pd(vec1, vec2); //4, 6, 6, 4
_mm256_storeu_pd(xarr, vec1);
#else
__m128d vec1, vec2;
vec1 = _mm_setr_pd(1.0, 2.0);
vec2 = _mm_setr_pd(2.0, 1.0);
vec1 = _mm_mul_pd(vec1, vec2); //2, 2
_mm_storeu_pd(xarr, vec1);
#endif
printf("\nlast = %8.2f \n", xarr[SIMD_SIZE_SPN - 1]); //8, 4, 2
return 0;
}
Подробнее здесь: [url]https://stackoverflow.com/questions/79781161/how-do-i-get-my-existing-msvc-project-to-compile-with-the-visual-studio-2022-cla[/url]
Ответить
1 сообщение
• Страница 1 из 1
Перейти
- Кемерово-IT
- ↳ Javascript
- ↳ C#
- ↳ JAVA
- ↳ Elasticsearch aggregation
- ↳ Python
- ↳ Php
- ↳ Android
- ↳ Html
- ↳ Jquery
- ↳ C++
- ↳ IOS
- ↳ CSS
- ↳ Excel
- ↳ Linux
- ↳ Apache
- ↳ MySql
- Детский мир
- Для души
- ↳ Музыкальные инструменты даром
- ↳ Печатная продукция даром
- Внешняя красота и здоровье
- ↳ Одежда и обувь для взрослых даром
- ↳ Товары для здоровья
- ↳ Физкультура и спорт
- Техника - даром!
- ↳ Автомобилистам
- ↳ Компьютерная техника
- ↳ Плиты: газовые и электрические
- ↳ Холодильники
- ↳ Стиральные машины
- ↳ Телевизоры
- ↳ Телефоны, смартфоны, плашеты
- ↳ Швейные машинки
- ↳ Прочая электроника и техника
- ↳ Фототехника
- Ремонт и интерьер
- ↳ Стройматериалы, инструмент
- ↳ Мебель и предметы интерьера даром
- ↳ Cантехника
- Другие темы
- ↳ Разное даром
- ↳ Давай меняться!
- ↳ Отдам\возьму за копеечку
- ↳ Работа и подработка в Кемерове
- ↳ Давай с тобой поговорим...
Мобильная версия