Кажется, конфликтуют 5 символов: nothrow_t
, new
, delete
, new[]
, delete[]
.
[2/37] Building CXX object lib\CMakeFiles\cxx_shared.dir\__\src\algorithm.cpp.obj
FAILED: lib/CMakeFiles/cxx_shared.dir/__/src/algorithm.cpp.obj
C:\PROGRA~1\LLVM\bin\clang-cl.exe /nologo -TP -DNDEBUG -D_ALLOW_ITERATOR_DEBUG_LEVEL_MISMATCH -D_ALLOW_MSC_VER_MISMATCH -D_CRTBLD -D_CRT_SECURE_NO_WARNINGS -D_CRT_STDIO_ISO_WIDE_SPECIFIERS -D_LIBCPP_BUILDING_LIBRARY -D_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER -IC:\Users\User\AppData\Roaming\libcxx-master\include -fms-compatibility-version=19.00 --target=x86_64--windows -D_LIBC_NO_VCRUNTIME -D_LIBCPP_NO_VCRUNTIME /MD /O2 /Ob2 /DNDEBUG /std:c++14 -Wall -Wextra -W -Wwrite-strings -Wno-unused-parameter -Wno-long-long -Werror=return-type -Wextra-semi -Wno-user-defined-literals -Wno-covered-switch-default -Wno-c++98-compat -Wno-c++98-compat-pedantic -Wno-c++11-compat -Wno-undef -Wno-reserved-id-macro -Wno-gnu-include-next -Wno-gcc-compat -Wno-zero-as-null-pointer-constant -Wno-deprecated-dynamic-exception-spec -Wno-sign-conversion -Wno-old-style-cast -Wno-deprecated -Wno-shift-sign-overflow -Wno-double-promotion -Wno-error -EHsc /Zl /showIncludes /Folib\CMakeFiles\cxx_shared.dir\__\src\algorithm.cpp.obj /Fdlib\CMakeFiles\cxx_shared.dir\ -c C:\Users\User\AppData\Roaming\libcxx-master\src\algorithm.cpp
In file included from C:\Users\User\AppData\Roaming\libcxx-master\src\algorithm.cpp:10:
In file included from C:\Users\User\AppData\Roaming\libcxx-master\include\random:1645:
In file included from C:\Users\User\AppData\Roaming\libcxx-master\include\istream:163:
In file included from C:\Users\User\AppData\Roaming\libcxx-master\include\ostream:137:
In file included from C:\Users\User\AppData\Roaming\libcxx-master\include\ios:215:
In file included from C:\Users\User\AppData\Roaming\libcxx-master\include\__locale:23:
In file included from C:\Users\User\AppData\Roaming\libcxx-master\include\support/win32/locale_win32.h:15:
In file included from C:\Program Files (x86)\Microsoft Visual Studio\2019\BuildTools\VC\Tools\MSVC\14.20.27508\include\xlocinfo.h:6:
In file included from C:\Program Files (x86)\Microsoft Visual Studio\2019\BuildTools\VC\Tools\MSVC\14.20.27508\include\yvals.h:9:
In file included from C:\Program Files (x86)\Windows Kits\10\Include\10.0.17763.0\ucrt\crtdbg.h:13:
In file included from C:\Program Files (x86)\Microsoft Visual Studio\2019\BuildTools\VC\Tools\MSVC\14.20.27508\include\vcruntime_new_debug.h:10:
C:\Program Files (x86)\Microsoft Visual Studio\2019\BuildTools\VC\Tools\MSVC\14.20.27508\include\vcruntime_new.h(34,16): error: redefinition of 'nothrow_t'
struct nothrow_t {
^
C:\Users\User\AppData\Roaming\libcxx-master\include\new(123,25): note: previous definition is here
struct _LIBCPP_TYPE_VIS nothrow_t {};
^
Это мой CMAKE. (тоже пробовал 19.20)
cmake -G Ninja -DCMAKE_BUILD_TYPE=Release -DCMAKE_MAKE_PROGRAM = "C:/Program Files (x86)/Ninja/ninja.exe"
-DCMAKE_SYSTEM_NAME=Windows -DCMAKE_C_COMPILER = "C:/Program Files/LLVM/bin/clang-cl.exe"
-DCMAKE_C_FLAGS = "-fms-compatibility-version=19.00 --target=x86_64--windows -D_LIBC_NO_VCRUNTIME"
-DCMAKE_CXX_COMPILER = "C:/Program Files/LLVM/bin/clang-cl.exe"
-DCMAKE_CXX_FLAGS = "-fms-compatibility-version=19.00 --target=x86_64--windows -D_LIBC_NO_VCRUNTIME -D_LIBCPP_NO_VCRUNTIME"
-DCMAKE_C_LINK_EXECUTABLE = "C:/Program Files/LLVM/bin/lld-link.exe"
-DCMAKE_CXX_LINK_EXECUTABLE = "C:/Program Files/LLVM/bin/lld-link.exe"
-DLLVM_USE_LINKER = "C:/Program Files/LLVM/bin/lld-link.exe"
-DLLVM_PATH = "C:/Program Files/LLVM" -DLIBCXX_ENABLE_SHARED=YES
-DLIBCXX_ENABLE_STATIC=NO -DLIBCXX_ENABLE_EXPERIMENTAL_LIBRARY=YES
"C:/Users/User/AppData/Roaming/libcxx-master"
Это мой SDK
set LIB=C:\Program Files (x86)\Microsoft Visual Studio\2019\BuildTools\VC\Tools\MSVC\14.20.27508\lib\x64;
C:\Program Files (x86)\Windows Kits\10\Lib\10.0.17763.0\ucrt\x64;
C:\Program Files (x86)\Windows Kits\10\Lib\10.0.17763.0\um\x64
Могу ли я заставить его работать? Куда отправить выпуск кому?
@HansPassant Этот набор параметров CMAKE отлично работает с MSVC 2017. Я успешно строил его раньше. Мне просто интересно, как я могу заставить его работать с MSVC 2019?
У меня такая же проблема с VS2019.
Я удалил флаги no_runtime, но установил
-DCMAKE_C_LINK_EXECUTABLE = "lld-link.exe -flavor link" ^
-DCMAKE_CXX_LINK_EXECUTABLE = "lld-link.exe -flavor link" ^
Добавлен -flavor link
, и он успешно связан. Я не тестировал исключения, но тестировал программу с std::thread
, компилируется и работает так же, как и с cl
компилятором.
UPD: базовый try-catch с std::exception
throwed работает
UPD: полный пакет cmake (ваши пути могут отличаться!)
cmake -G Ninja -DCMAKE_BUILD_TYPE=Release -DCMAKE_MAKE_PROGRAM = "D:/Programming/ninja-build/ninja.exe" ^
-DCMAKE_SYSTEM_NAME=Windows -DCMAKE_C_COMPILER = "clang-cl.exe" ^
-DCMAKE_C_FLAGS = "-fms-compatibility-version=19.00 --target=x86_64--windows" ^
-DCMAKE_CXX_COMPILER = "clang-cl.exe" ^
-DCMAKE_CXX_FLAGS = "-fms-compatibility-version=19.00 --target=x86_64--windows " ^
-DCMAKE_C_LINK_EXECUTABLE = "lld-link.exe -flavor link" ^
-DCMAKE_CXX_LINK_EXECUTABLE = "lld-link.exe -flavor link" ^
-DLLVM_USE_LINKER = "lld-link.exe" ^
-DLLVM_PATH = "C:/Program Files/LLVM" -DLIBCXX_ENABLE_SHARED=YES ^
-DLIBCXX_ENABLE_STATIC=NO -DLIBCXX_ENABLE_EXPERIMENTAL_LIBRARY=YES ^
"D:\Programming\cpp_sandbox\libcxx-9.0.0.src"
Пробовал без -flavor link
, тоже работает, Что делает -flavor link
?
Он указывает компоновщику clang использовать компоновщик MSVC. Теперь есть другая проблема - я не могу использовать эту библиотеку без MSVC, потому что она не может #include_next <wchar.h>
, хотя я пытался добавить -MT к флагам компоновщика - это не помогает, просто нужно, чтобы некоторые "другие" системные заголовки были (но Я не хочу, чтобы MSVC присутствовал на моем ПК...). Может быть, у вас есть идея, как построить его полностью самостоятельно?
Я никогда не пробовал это сам, но я думаю, что вы можете попробовать clang++ --driver-mode=g++
со статической стандартной библиотекой msys2 gcc libstdc++.a
=> пакеты.msys2.org/package/mingw-w64-x86_64-gcc . Тем не менее, я уверен, что в любом случае будет зависеть от ОС msvcrt.dll (NT CRT, а не Visual Studio).
@sandthorn проблема в том, что по умолчанию clang вызывает компоновщик с -deafultlib:libcmt
, и я понятия не имею, как это исправить, кроме как разделить сборку на clang -c...
и lld-link -defaultlib:msvcrt...
@sandthorn, не могли бы вы также показать мне пример сборки с использованием библиотеки NT?
Вы используете [clang], а не [visual-c++]. Ожидание того, что один компилятор обрадуется файлам #include другого, приведет к слезам. Если вы хотите использовать Clang, вам следует установить его специфичный для VS вариант. Вернитесь к установщику, выберите Modify. Флажок должен находиться на вкладках «Отдельные компоненты». Раньше в VS2017 назывался «Clang/C2».