Я пытаюсь скомпилировать цепочку с MinGw на Windows 7. Сбой на 90% со следующей ошибкой:
C:\cling\src\tools\cling\lib\Interpreter\Exception.cpp:44:62: error: exception handling disabled, use -fexceptions to enable
cling::InvalidDerefException::DerefType::NULL_DEREF);
^
Я использовал эти команды для сборки:
cmake -G "MinGW Makefiles" -DCMAKE_INSTALL_PREFIX="c:/cling" -DCMAKE_BUILD_TYPE=Release -DCMAKE_C_COMPILER="C:/Qt/Qt5.14.1/Tools/mingw730_32/bin/gcc.exe" -DCMAKE_CXX_COMPILER="C:/Qt/Qt5.14.1/Tools/mingw730_32/bin/g++.exe" ..\src
cmake --build .
Я пытался добавить -fexceptions в теги cmake, например: -DCMAKE_CXXFLAGS="-fexceptions"
и вот это: -DCMAKE_CXX_FLAGS="-fexceptions"
, но это не помогает, я получаю ту же ошибку.
Любая помощь будет принята с благодарностью.
Редактировать:
Я пытался избежать этого, но я изменил файлы \tools\cling\lib\Interpreter\CMakeLists.txt
и \tools\cling\lib\UserInterface\CMakeLists.txt
, чтобы избавиться от этой ошибки. Я изменил if (UNIX)
на if (LLVM_COMPILER_IS_GCC_COMPATIBLE)
.
Затем я получил wchar_t
ошибок преобразования, таких как: error: cannot convert 'LPTSTR {aka char*}' to 'const wchar_t*'
, поэтому я добавил -DCMAKE_CXX_FLAGS="-DUNICODE -D_UNICODE"
к вызову cmake:
cmake -G "MinGW Makefiles" -DCMAKE_INSTALL_PREFIX="c:/cling" -DCMAKE_BUILD_TYPE=Release -DCMAKE_C_COMPILER="C:/Qt/Qt5.14.1/Tools/mingw730_32/bin/gcc.exe" -DCMAKE_CXX_COMPILER="C:/Qt/Qt5.14.1/Tools/mingw730_32/bin/g++.exe" -DCMAKE_CXX_FLAGS="-DUNICODE -D_UNICODE" ..\src
Теперь я получаю следующие ошибки:
C:\cling\src\tools\cling\lib\Utils\PlatformWin.cpp: In function 'int cling::utils::platform::windows::GetVisualStudioVersionCompiledWith()':
C:\cling\src\tools\cling\lib\Utils\PlatformWin.cpp:380:11: error: '_MSC_VER' was not declared in this scope
return (_MSC_VER / 100) - 6;
^~~~~~~~
C:\cling\src\tools\cling\lib\Utils\PlatformWin.cpp:380:11: note: suggested alternative: '_TSCHAR'
return (_MSC_VER / 100) - 6;
^~~~~~~~
_TSCHAR
C:\cling\src\tools\cling\lib\Utils\PlatformWin.cpp: In function 'const void* cling::utils::platform::DLSym(const string&, std::__cxx11::string*)':
C:\cling\src\tools\cling\lib\Utils\PlatformWin.cpp:614:42: error: invalid conversion from 'FARPROC {aka int (__attribute__((__stdcall__)) *)()}' to 'v
oid*' [-fpermissive]
if (void* Addr = ::GetProcAddress(*It, s.c_str())) {
~~~~~~~~~~~~~~~~^~~~~~~~~~~~~~~~
C:\cling\src\tools\cling\lib\Utils\PlatformWin.cpp:625:44: error: invalid conversion from 'FARPROC {aka int (__attribute__((__stdcall__)) *)()}' to 'v
oid*' [-fpermissive]
if (void* Addr = ::GetProcAddress(Modules[i], s.c_str()))
~~~~~~~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~
C:\cling\src\tools\cling\lib\Utils\PlatformWin.cpp: In function 'bool cling::utils::platform::Popen(const string&, llvm::SmallVectorImpl<char>&, bool)
':
Я предполагаю, что ошибка _MSC_VER
не проблема, я могу подделать какую-нибудь случайную версию, но как насчет приведения FARPROC
к void*
?