sergiopolog
Posts: 2
Joined: Mon Nov 22, 2021 6:40 pm

Error while compiling MAME 0.237 in Visual Studio 2019

Hi guys, I recently decided to try to compile MAME myself, and while I managed to do it using msys2 and gmake on Windows, now I'm trying to do it inside Visual Studio 2019 with no success.

I've already followed the instructions from here: https://docs.mamedev.org/initialsetup/c ... ual-studio , creating the solution and projects and import them to visual studio, but when compiling, it raised the error below.

What could be the cause? is there something that I need to add to Visual studio first?
  • Msys2 updated everything yesterday
  • Visual Studio 2019 v16.11.7
  • MSVC 14.29.30133
I need to set the "/VX-" level in three projects to avoid some warnings to be treated as errors, but afte that, everything is properly compiled and built except for "frontend" project, due to the error below:

Code: Select all

Operación Compilar iniciada..
1>------ Operación Compilar iniciada: proyecto: frontend, configuración: Debug Win32 ------
1>Converting COPYING...
1>audit.cpp
1>cheat.cpp
1>clifront.cpp
1>infoxml.cpp
1>C:\Program Files (x86)\Microsoft Visual Studio\2019\Community\VC\Tools\MSVC\14.29.30133\include\future(324,17): error C2280: 'info_xml_creator::output::prepared_info &info_xml_creator::output::prepared_info::operator =(const info_xml_creator::output::prepared_info &)': se está intentando hacer referencia a una función eliminada.
1>C:\Program Files (x86)\Microsoft Visual Studio\2019\Community\VC\Tools\MSVC\14.29.30133\include\future(324,17): error C2280:         _Result = _STD forward<_Ty>(_Val);
1>C:\Program Files (x86)\Microsoft Visual Studio\2019\Community\VC\Tools\MSVC\14.29.30133\include\future(324,17): error C2280:                 ^
1>C:\DATA\mame\src\frontend\mame\infoxml.cpp(439): message : vea la declaración de 'info_xml_creator::output::prepared_info::operator ='
1>C:\DATA\mame\src\frontend\mame\infoxml.cpp(439): message : 		prepared_info &operator=(const prepared_info &) = delete;
1>C:\DATA\mame\src\frontend\mame\infoxml.cpp(439,18): message : "info_xml_creator::output::prepared_info &info_xml_creator::output::prepared_info::operator =(const info_xml_creator::output::prepared_info &)": la función se eliminó explícitamente.
1>C:\DATA\mame\src\frontend\mame\infoxml.cpp(439,18): message : 		prepared_info &operator=(const prepared_info &) = delete;
1>C:\DATA\mame\src\frontend\mame\infoxml.cpp(439,18): message : 		               ^
1>C:\Program Files (x86)\Microsoft Visual Studio\2019\Community\VC\Tools\MSVC\14.29.30133\include\future(319): message : al compilar la función del miembro clase plantilla "void std::_Associated_state<_Ty>::_Set_value_raw(_Ty &&,std::unique_lock<std::mutex> *,bool)"
1>C:\Program Files (x86)\Microsoft Visual Studio\2019\Community\VC\Tools\MSVC\14.29.30133\include\future(319): message :         with
1>C:\Program Files (x86)\Microsoft Visual Studio\2019\Community\VC\Tools\MSVC\14.29.30133\include\future(319): message :         [
1>C:\Program Files (x86)\Microsoft Visual Studio\2019\Community\VC\Tools\MSVC\14.29.30133\include\future(319): message :             _Ty=info_xml_creator::output::prepared_info
1>C:\Program Files (x86)\Microsoft Visual Studio\2019\Community\VC\Tools\MSVC\14.29.30133\include\future(319): message :         ]
1>C:\Program Files (x86)\Microsoft Visual Studio\2019\Community\VC\Tools\MSVC\14.29.30133\include\future(319): message :         bool _At_thread_exit) { // store a result while inside a locked block
1>C:\Program Files (x86)\Microsoft Visual Studio\2019\Community\VC\Tools\MSVC\14.29.30133\include\future(315): message : Vea la referencia a la creación de una instancia de la función plantilla "void std::_Associated_state<_Ty>::_Set_value_raw(_Ty &&,std::unique_lock<std::mutex> *,bool)" que se está compilando
1>C:\Program Files (x86)\Microsoft Visual Studio\2019\Community\VC\Tools\MSVC\14.29.30133\include\future(315): message :         with
1>C:\Program Files (x86)\Microsoft Visual Studio\2019\Community\VC\Tools\MSVC\14.29.30133\include\future(315): message :         [
1>C:\Program Files (x86)\Microsoft Visual Studio\2019\Community\VC\Tools\MSVC\14.29.30133\include\future(315): message :             _Ty=info_xml_creator::output::prepared_info
1>C:\Program Files (x86)\Microsoft Visual Studio\2019\Community\VC\Tools\MSVC\14.29.30133\include\future(315): message :         ]
1>C:\Program Files (x86)\Microsoft Visual Studio\2019\Community\VC\Tools\MSVC\14.29.30133\include\future(315): message :         _Set_value_raw(_STD forward<_Ty>(_Val), &_Lock, _At_thread_exit);
1>C:\Program Files (x86)\Microsoft Visual Studio\2019\Community\VC\Tools\MSVC\14.29.30133\include\future(788): message : Vea la referencia a la creación de una instancia de clase plantilla "std::_Associated_state<_Ty>" que se está compilando
1>C:\Program Files (x86)\Microsoft Visual Studio\2019\Community\VC\Tools\MSVC\14.29.30133\include\future(788): message :         with
1>C:\Program Files (x86)\Microsoft Visual Studio\2019\Community\VC\Tools\MSVC\14.29.30133\include\future(788): message :         [
1>C:\Program Files (x86)\Microsoft Visual Studio\2019\Community\VC\Tools\MSVC\14.29.30133\include\future(788): message :             _Ty=info_xml_creator::output::prepared_info
1>C:\Program Files (x86)\Microsoft Visual Studio\2019\Community\VC\Tools\MSVC\14.29.30133\include\future(788): message :         ]
1>C:\Program Files (x86)\Microsoft Visual Studio\2019\Community\VC\Tools\MSVC\14.29.30133\include\future(788): message :         return _Assoc_state->_Get_value(_Get_only_once);
1>C:\Program Files (x86)\Microsoft Visual Studio\2019\Community\VC\Tools\MSVC\14.29.30133\include\future(783): message : al compilar la función del miembro clase plantilla "_Ty &std::_State_manager<_Ty>::_Get_value(void) const"
1>C:\Program Files (x86)\Microsoft Visual Studio\2019\Community\VC\Tools\MSVC\14.29.30133\include\future(783): message :         with
1>C:\Program Files (x86)\Microsoft Visual Studio\2019\Community\VC\Tools\MSVC\14.29.30133\include\future(783): message :         [
1>C:\Program Files (x86)\Microsoft Visual Studio\2019\Community\VC\Tools\MSVC\14.29.30133\include\future(783): message :             _Ty=info_xml_creator::output::prepared_info
1>C:\Program Files (x86)\Microsoft Visual Studio\2019\Community\VC\Tools\MSVC\14.29.30133\include\future(783): message :         ]
1>C:\Program Files (x86)\Microsoft Visual Studio\2019\Community\VC\Tools\MSVC\14.29.30133\include\future(783): message :     _Ty& _Get_value() const {
1>C:\Program Files (x86)\Microsoft Visual Studio\2019\Community\VC\Tools\MSVC\14.29.30133\include\future(899): message : Vea la referencia a la creación de una instancia de la función plantilla "_Ty &std::_State_manager<_Ty>::_Get_value(void) const" que se está compilando
1>C:\Program Files (x86)\Microsoft Visual Studio\2019\Community\VC\Tools\MSVC\14.29.30133\include\future(899): message :         with
1>C:\Program Files (x86)\Microsoft Visual Studio\2019\Community\VC\Tools\MSVC\14.29.30133\include\future(899): message :         [
1>C:\Program Files (x86)\Microsoft Visual Studio\2019\Community\VC\Tools\MSVC\14.29.30133\include\future(899): message :             _Ty=info_xml_creator::output::prepared_info
1>C:\Program Files (x86)\Microsoft Visual Studio\2019\Community\VC\Tools\MSVC\14.29.30133\include\future(899): message :         ]
1>C:\Program Files (x86)\Microsoft Visual Studio\2019\Community\VC\Tools\MSVC\14.29.30133\include\future(899): message :         return _STD move(_Local._Get_value());
1>C:\Program Files (x86)\Microsoft Visual Studio\2019\Community\VC\Tools\MSVC\14.29.30133\include\future(875): message : Vea la referencia a la creación de una instancia de clase plantilla "std::_State_manager<_Ty>" que se está compilando
1>C:\Program Files (x86)\Microsoft Visual Studio\2019\Community\VC\Tools\MSVC\14.29.30133\include\future(875): message :         with
1>C:\Program Files (x86)\Microsoft Visual Studio\2019\Community\VC\Tools\MSVC\14.29.30133\include\future(875): message :         [
1>C:\Program Files (x86)\Microsoft Visual Studio\2019\Community\VC\Tools\MSVC\14.29.30133\include\future(875): message :             _Ty=info_xml_creator::output::prepared_info
1>C:\Program Files (x86)\Microsoft Visual Studio\2019\Community\VC\Tools\MSVC\14.29.30133\include\future(875): message :         ]
1>C:\Program Files (x86)\Microsoft Visual Studio\2019\Community\VC\Tools\MSVC\14.29.30133\include\future(875): message : class future : public _State_manager<_Ty> {
1>C:\Program Files (x86)\Microsoft Visual Studio\2019\Community\VC\Tools\MSVC\14.29.30133\include\deque(552): message : Vea la referencia a la creación de una instancia de clase plantilla "std::future<info_xml_creator::output::prepared_info>" que se está compilando
1>C:\Program Files (x86)\Microsoft Visual Studio\2019\Community\VC\Tools\MSVC\14.29.30133\include\deque(552): message :     static constexpr size_t _Bytes = sizeof(value_type);
1>C:\Program Files (x86)\Microsoft Visual Studio\2019\Community\VC\Tools\MSVC\14.29.30133\include\deque(595): message : Vea la referencia a la creación de una instancia de clase plantilla "std::_Deque_val<std::_Deque_simple_types<_Ty>>" que se está compilando
1>C:\Program Files (x86)\Microsoft Visual Studio\2019\Community\VC\Tools\MSVC\14.29.30133\include\deque(595): message :         with
1>C:\Program Files (x86)\Microsoft Visual Studio\2019\Community\VC\Tools\MSVC\14.29.30133\include\deque(595): message :         [
1>C:\Program Files (x86)\Microsoft Visual Studio\2019\Community\VC\Tools\MSVC\14.29.30133\include\deque(595): message :             _Ty=std::future<info_xml_creator::output::prepared_info>
1>C:\Program Files (x86)\Microsoft Visual Studio\2019\Community\VC\Tools\MSVC\14.29.30133\include\deque(595): message :         ]
1>C:\Program Files (x86)\Microsoft Visual Studio\2019\Community\VC\Tools\MSVC\14.29.30133\include\deque(595): message :     static constexpr int _Block_size       = _Scary_val::_Block_size;
1>C:\Program Files (x86)\Microsoft Visual Studio\2019\Community\VC\Tools\MSVC\14.29.30133\include\queue(27): message : Vea la referencia a la creación de una instancia de clase plantilla "std::deque<std::future<info_xml_creator::output::prepared_info>,std::allocator<std::future<info_xml_creator::output::prepared_info>>>" que se está compilando
1>C:\Program Files (x86)\Microsoft Visual Studio\2019\Community\VC\Tools\MSVC\14.29.30133\include\queue(27): message :     using value_type      = typename _Container::value_type;
1>C:\DATA\mame\src\frontend\mame\infoxml.cpp(473): message : Vea la referencia a la creación de una instancia de clase plantilla "std::queue<std::future<info_xml_creator::output::prepared_info>,std::deque<std::future<info_xml_creator::output::prepared_info>,std::allocator<std::future<info_xml_creator::output::prepared_info>>>>" que se está compilando
1>C:\DATA\mame\src\frontend\mame\infoxml.cpp(473): message : 	std::queue<std::future<prepared_info>> tasks;
1>iptseqpoll.cpp
1>language.cpp
1>luaengine.cpp
1>Compilación del proyecto "frontend.vcxproj" terminada -- ERROR.
1>Se canceló una tarea.
1>Se canceló una tarea.
La compilación se ha cancelado.
User avatar
cuavas
Posts: 125
Joined: Tue Nov 11, 2014 1:04 pm
Location: Sydney, Australia
Contact: Website

Re: Error while compiling MAME 0.237 in Visual Studio 2019

As far as I can tell, it’s a regression in the Microsoft runtime library. There’s nothing in the code that should require the object to be copied, but since some update to Visual Studio, the queue container started tying to instantiate the copy constructor. See here: https://github.com/mamedev/mame/pull/86 ... r726026050

If you want to be able to build with Microsoft tools, you need to apply pressure to Microsoft to make a working toolchain.
sergiopolog
Posts: 2
Joined: Mon Nov 22, 2021 6:40 pm

Re: Error while compiling MAME 0.237 in Visual Studio 2019

I just tried to compile "frontend" project using previous minor versions of MSVC toolset (using this guide: https://devblogs.microsoft.com/cppblog/ ... udio-2019/) but no success.

Even with the first version of MSVC toolset for Visual Studio 2019 (v14.20) it still produces the same compilation error, so as for now it's not even possible to compile MAME with Visual Studio 2019:

Code: Select all

1>C:\Program Files (x86)\Microsoft Visual Studio\2019\Community\VC\Tools\MSVC\14.20.27508\include\future(309,1): error C2280: 'info_xml_creator::output::prepared_info &info_xml_creator::output::prepared_info::operator =(const info_xml_creator::output::prepared_info &)': se está intentando hacer referencia a una función eliminada.
1>C:\Program Files (x86)\Microsoft Visual Studio\2019\Community\VC\Tools\MSVC\14.20.27508\include\future(309,1): error C2280:         _Result = _STD forward<_Ty>(_Val);
1>C:\Program Files (x86)\Microsoft Visual Studio\2019\Community\VC\Tools\MSVC\14.20.27508\include\future(309,1): error C2280: ^
1>C:\DATA\mame\src\frontend\mame\infoxml.cpp(439): message : vea la declaración de 'info_xml_creator::output::prepared_info::operator ='
1>C:\DATA\mame\src\frontend\mame\infoxml.cpp(439): message : 		prepared_info &operator=(const prepared_info &) = delete;
1>C:\DATA\mame\src\frontend\mame\infoxml.cpp(439,18): message : "info_xml_creator::output::prepared_info &info_xml_creator::output::prepared_info::operator =(const info_xml_creator::output::prepared_info &)": la función se eliminó explícitamente.
1>C:\DATA\mame\src\frontend\mame\infoxml.cpp(439,18): message : 		prepared_info &operator=(const prepared_info &) = delete;
1>C:\DATA\mame\src\frontend\mame\infoxml.cpp(439,18): message : 		               ^



Any other recommendations for an IDE to dig into the code and compile and debug MAME?
User avatar
cuavas
Posts: 125
Joined: Tue Nov 11, 2014 1:04 pm
Location: Sydney, Australia
Contact: Website

Re: Error while compiling MAME 0.237 in Visual Studio 2019

It’s not the toolset that regressed, it’s the C++ standard library. I’m pretty sure Nathan “Bletch” Woods wrote that code using Visual Studio in the first place, and I built MAME with whatever version of the C++ standard library it is that was installed with Visual Studio 16.11.3.

The trouble with IDEs is that they fall over with any reasonably large project. I use vim to work on MAME – you spend less time fighting against your tools that way. Some people like using Visual Studio Code, but it’s a resource hog built on a JavaScript runtime.

Return to “MAME Discussion”