Я хочу отредактировать проект Linux posix на C++17 под Windows 11 в QtCreator 13.1 и воспользоваться преимуществами clangd и clang-tidy (LLVM версии 17.0.1). Мне не обязательно уметь компилировать, я делаю это под Linux. Для этой цели я использую Cygwin64, и мой проект C++ загружает (через cmake 3.28) все файлы cpp в IDE. Однако когда я использую из STL, я сталкиваюсь с проблемами с заголовком Cygwin-GCC. В результате инструменты clang становятся непригодными для таких случаев использования. Может ли кто-нибудь сказать мне, что я делаю неправильно и есть ли обходной путь в случае ошибки? Я мог бы использовать libc++-devel 8.0.1-1, у которого, кажется, по крайней мере нет проблем с мьютексом и thread_local, но я бы хотел использовать заголовки gcc, поскольку именно их я использую для компиляции своего проекта под Linux.
Установлен пакет Cygwin64:
gcc-g++ 13.2.1+20240426-0.1
CMake:
cmake_minimum_required(VERSION 3.28)
project(TestApp LANGUAGES CXX)
set(CMAKE_VERBOSE_MAKEFILE ON)
set(CMAKE_EXPORT_COMPILE_COMMANDS ON CACHE INTERNAL "")
set(CMAKE_CXX_STANDARD 17)
set(CMAKE_CXX_STANDARD_REQUIRED ON)
set(CMAKE_CXX_EXTENSIONS OFF)
add_executable(${PROJECT_NAME} main.cpp)
target_include_directories(${PROJECT_NAME} SYSTEM PRIVATE "C:/cygwin64/lib/gcc/x86_64-pc-cygwin/13/include/c++")
target_include_directories(${PROJECT_NAME} SYSTEM PRIVATE "C:/cygwin64/lib/gcc/x86_64-pc-cygwin/13/include/c++/x86_64-pc-cygwin")
target_include_directories(${PROJECT_NAME} SYSTEM PRIVATE "C:/cygwin64/lib/gcc/x86_64-pc-cygwin/13/include/c++/backward")
target_include_directories(${PROJECT_NAME} SYSTEM PRIVATE "C:/cygwin64/lib/gcc/x86_64-pc-cygwin/13/include")
target_include_directories(${PROJECT_NAME} SYSTEM PRIVATE "C:/cygwin64/usr/include")
target_compile_definitions(${PROJECT_NAME} PRIVATE _GNU_SOURCE)
Clang-Tidy-Call:
D:\Qt\Tools\QtCreator\bin\clang\bin\ clang-tidy.exe "-config={}" "-checks=-clang-diagnostic-*" "-export-fixes=C:\Users\XXX\AppData\Local\Temp\QtCreator-FUhJZO\clangtools-RtucjL\ report-main.cpp-kMraAe" D:\Projecs\TestApp\main.cpp -- -Wno-unknown-pragmas -Wno-unknown-warning-option -Wno-documentation-unknown-command -w -nostdinc -nostdinc++ -g "-std=c++17" "-fdiagnostics-color=always" -fsyntax-only -m64 "--target=x86_64-pc-cygwin" -x c++ -D_GNU_SOURCE -ID:\Qt\Tools\QtCreator\share \qtcreator\cplusplus\wrappedMingwHeaders -IC:\cygwin64\lib\gcc\x86_64-pc-cygwin\13\include\c++ -IC:\cygwin64\lib\gcc\x86_64-pc-cygwin\13\include\c++\x86_64 -pc-cygwin -IC:\cygwin64\lib\gcc\x86_64-pc-cygwin\13\include\c++\backward -IC:\cygwin64\lib\gcc\x86_64-pc-cygwin\13\include -isystem \usr \lib\gcc\x86_64-pc-cygwin\13\include\c++ -isystem \usr\lib\gcc\x86_64-pc-cygwin\13\include\c++\x86_64-pc-cygwin -isystem \usr\lib\gcc \x86_64-pc-cygwin\13\include\c++\backward -isystem D:\Qt\Tools\QtCreator\bin\clang\lib\clang\17\include -isystem C:\cygwin64\usr\include -isystem \usr \lib\gcc\x86_64-pc-cygwin\13........\include\w32api
C++ — пример:
#include
int main(){ return 0; }
Результаты:
main.cpp:1:10: Во включенном файле: локальное хранилище потока не поддерживается для текущей цели
C:\cygwin64\ lib\gcc\x86_64-pc-cygwin\13\include\c++/mutex:823:10: примечание: здесь произошла ошибка
Заголовок мьютекса: ( Последняя строка вызывает ошибку)
...
...
#ifdef _GLIBCXX_HAS_GTHREADS
/// Flag type used by std::call_once
struct once_flag
{
constexpr once_flag() noexcept = default;
/// Deleted copy constructor
once_flag(const once_flag&) = delete;
/// Deleted assignment operator
once_flag& operator=(const once_flag&) = delete;
private:
// For gthreads targets a pthread_once_t is used with pthread_once, but
// for most targets this doesn't work correctly for exceptional executions.
__gthread_once_t _M_once = __GTHREAD_ONCE_INIT;
struct _Prepare_execution;
template
friend void
call_once(once_flag& __once, _Callable&& __f, _Args&&... __args);
};
/// @cond undocumented
# ifdef _GLIBCXX_HAVE_TLS
// If TLS is available use thread-local state for the type-erased callable
// that is being run by std::call_once in the current thread.
extern __thread void* __once_callable; //HERE
Подробнее здесь: https://stackoverflow.com/questions/784 ... with-mutex
Проблема с инструментами Clang в Windows, использующими Cygwin64 для проекта C++17 с ⇐ C++
Программы на C++. Форум разработчиков
1715273395
Anonymous
Я хочу отредактировать проект Linux posix на C++17 под Windows 11 в QtCreator 13.1 и воспользоваться преимуществами clangd и clang-tidy (LLVM версии 17.0.1). Мне не обязательно уметь компилировать, я делаю это под Linux. Для этой цели я использую Cygwin64, и мой проект C++ загружает (через cmake 3.28) все файлы cpp в IDE. Однако когда я использую из STL, я сталкиваюсь с проблемами с заголовком Cygwin-GCC. В результате инструменты clang становятся непригодными для таких случаев использования. Может ли кто-нибудь сказать мне, что я делаю неправильно и есть ли обходной путь в случае ошибки? Я мог бы использовать libc++-devel 8.0.1-1, у которого, кажется, по крайней мере нет проблем с мьютексом и thread_local, но я бы хотел использовать заголовки gcc, поскольку именно их я использую для компиляции своего проекта под Linux.
[b]Установлен пакет Cygwin64:[/b]
gcc-g++ 13.2.1+20240426-0.1
[b]CMake:[/b]
cmake_minimum_required(VERSION 3.28)
project(TestApp LANGUAGES CXX)
set(CMAKE_VERBOSE_MAKEFILE ON)
set(CMAKE_EXPORT_COMPILE_COMMANDS ON CACHE INTERNAL "")
set(CMAKE_CXX_STANDARD 17)
set(CMAKE_CXX_STANDARD_REQUIRED ON)
set(CMAKE_CXX_EXTENSIONS OFF)
add_executable(${PROJECT_NAME} main.cpp)
target_include_directories(${PROJECT_NAME} SYSTEM PRIVATE "C:/cygwin64/lib/gcc/x86_64-pc-cygwin/13/include/c++")
target_include_directories(${PROJECT_NAME} SYSTEM PRIVATE "C:/cygwin64/lib/gcc/x86_64-pc-cygwin/13/include/c++/x86_64-pc-cygwin")
target_include_directories(${PROJECT_NAME} SYSTEM PRIVATE "C:/cygwin64/lib/gcc/x86_64-pc-cygwin/13/include/c++/backward")
target_include_directories(${PROJECT_NAME} SYSTEM PRIVATE "C:/cygwin64/lib/gcc/x86_64-pc-cygwin/13/include")
target_include_directories(${PROJECT_NAME} SYSTEM PRIVATE "C:/cygwin64/usr/include")
target_compile_definitions(${PROJECT_NAME} PRIVATE _GNU_SOURCE)
[b]Clang-Tidy-Call:[/b]
D:\Qt\Tools\QtCreator\bin\clang\bin\ clang-tidy.exe "-config={}" "-checks=-clang-diagnostic-*" "-export-fixes=C:\Users\XXX\AppData\Local\Temp\QtCreator-FUhJZO\clangtools-RtucjL\ report-main.cpp-kMraAe" D:\Projecs\TestApp\main.cpp -- -Wno-unknown-pragmas -Wno-unknown-warning-option -Wno-documentation-unknown-command -w -nostdinc -nostdinc++ -g "-std=c++17" "-fdiagnostics-color=always" -fsyntax-only -m64 "--target=x86_64-pc-cygwin" -x c++ -D_GNU_SOURCE -ID:\Qt\Tools\QtCreator\share \qtcreator\cplusplus\wrappedMingwHeaders -IC:\cygwin64\lib\gcc\x86_64-pc-cygwin\13\include\c++ -IC:\cygwin64\lib\gcc\x86_64-pc-cygwin\13\include\c++\x86_64 -pc-cygwin -IC:\cygwin64\lib\gcc\x86_64-pc-cygwin\13\include\c++\backward -IC:\cygwin64\lib\gcc\x86_64-pc-cygwin\13\include -isystem \usr \lib\gcc\x86_64-pc-cygwin\13\include\c++ -isystem \usr\lib\gcc\x86_64-pc-cygwin\13\include\c++\x86_64-pc-cygwin -isystem \usr\lib\gcc \x86_64-pc-cygwin\13\include\c++\backward -isystem D:\Qt\Tools\QtCreator\bin\clang\lib\clang\17\include -isystem C:\cygwin64\usr\include -isystem \usr \lib\gcc\x86_64-pc-cygwin\13........\include\w32api
[b]C++ — пример:[/b]
#include
int main(){ return 0; }
Результаты:
main.cpp:1:10: Во включенном файле: локальное хранилище потока не поддерживается для текущей цели
C:\cygwin64\ lib\gcc\x86_64-pc-cygwin\13\include\c++/mutex:823:10: примечание: здесь произошла ошибка
[b]Заголовок мьютекса:[/b] ( Последняя строка вызывает ошибку)
...
...
#ifdef _GLIBCXX_HAS_GTHREADS
/// Flag type used by std::call_once
struct once_flag
{
constexpr once_flag() noexcept = default;
/// Deleted copy constructor
once_flag(const once_flag&) = delete;
/// Deleted assignment operator
once_flag& operator=(const once_flag&) = delete;
private:
// For gthreads targets a pthread_once_t is used with pthread_once, but
// for most targets this doesn't work correctly for exceptional executions.
__gthread_once_t _M_once = __GTHREAD_ONCE_INIT;
struct _Prepare_execution;
template
friend void
call_once(once_flag& __once, _Callable&& __f, _Args&&... __args);
};
/// @cond undocumented
# ifdef _GLIBCXX_HAVE_TLS
// If TLS is available use thread-local state for the type-erased callable
// that is being run by std::call_once in the current thread.
extern __thread void* __once_callable; //HERE
Подробнее здесь: [url]https://stackoverflow.com/questions/78455768/issue-with-clang-tools-on-windows-using-cygwin64-for-a-c17-project-with-mutex[/url]
Ответить
1 сообщение
• Страница 1 из 1
Перейти
- Кемерово-IT
- ↳ Javascript
- ↳ C#
- ↳ JAVA
- ↳ Elasticsearch aggregation
- ↳ Python
- ↳ Php
- ↳ Android
- ↳ Html
- ↳ Jquery
- ↳ C++
- ↳ IOS
- ↳ CSS
- ↳ Excel
- ↳ Linux
- ↳ Apache
- ↳ MySql
- Детский мир
- Для души
- ↳ Музыкальные инструменты даром
- ↳ Печатная продукция даром
- Внешняя красота и здоровье
- ↳ Одежда и обувь для взрослых даром
- ↳ Товары для здоровья
- ↳ Физкультура и спорт
- Техника - даром!
- ↳ Автомобилистам
- ↳ Компьютерная техника
- ↳ Плиты: газовые и электрические
- ↳ Холодильники
- ↳ Стиральные машины
- ↳ Телевизоры
- ↳ Телефоны, смартфоны, плашеты
- ↳ Швейные машинки
- ↳ Прочая электроника и техника
- ↳ Фототехника
- Ремонт и интерьер
- ↳ Стройматериалы, инструмент
- ↳ Мебель и предметы интерьера даром
- ↳ Cантехника
- Другие темы
- ↳ Разное даром
- ↳ Давай меняться!
- ↳ Отдам\возьму за копеечку
- ↳ Работа и подработка в Кемерове
- ↳ Давай с тобой поговорим...
Мобильная версия