microprofile icon indicating copy to clipboard operation
microprofile copied to clipboard

Can‘t build microprofile with mingw64

Open deltaLRD opened this issue 2 years ago • 1 comments

My mingw64 is download from WinLibs

when I build this project with

cmake .. -G "Ninja"
ninja

the error is

[1/2] Building CXX object CMakeFiles/microprofile.dir/microprofile.cpp.obj
FAILED: CMakeFiles/microprofile.dir/microprofile.cpp.obj
D:\mingw64\bin\c++.exe -DMICROPROFILE_EXPORT -ID:/C++_proj/microprofile -ID:/C++_proj/microprofile/build  -MD -MT CMakeFiles/microprofile.dir/microprofile.cpp.obj -MF CMakeFiles\microprofile.dir\microprofile.cpp.obj.d -o CMakeFiles/microprofile.dir/microprofile.cpp.obj -c D:/C++_proj/microprofile/microprofile.cpp
D:/C++_proj/microprofile/microprofile.cpp: In function 'void MicroProfileThreadStart(void**, MicroProfileThreadFunc)':
D:/C++_proj/microprofile/microprofile.cpp:1206:53: error: invalid conversion from 'MicroProfileThreadFunc' {aka 'void* (*)(void*)'} to 'LPVOID' {aka 'void*'} [-fpermissive]
 1206 |     *pThread = CreateThread(0, 0, ThreadTrampoline, Func, 0, 0);
      |                                                     ^~~~
      |                                                     |
      |                                                     MicroProfileThreadFunc {aka void* (*)(void*)}
In file included from d:\mingw64\x86_64-w64-mingw32\include\winbase.h:29,
                 from d:\mingw64\x86_64-w64-mingw32\include\windows.h:70,
                 from d:\mingw64\x86_64-w64-mingw32\include\winsock2.h:23,
                 from D:/C++_proj/microprofile/microprofile.cpp:227:
d:\mingw64\x86_64-w64-mingw32\include\processthreadsapi.h:279:150: note:   initializing argument 4 of 'void* CreateThread(LPSECURITY_ATTRIBUTES, SIZE_T, LPTHREAD_START_ROUTINE, LPVOID, DWORD, LPDWORD)'
  279 |   WINBASEAPI HANDLE WINAPI CreateThread (LPSECURITY_ATTRIBUTES lpThreadAttributes, SIZE_T dwStackSize, LPTHREAD_START_ROUTINE lpStartAddress, LPVOID lpParameter, DWORD dwCreationFlags, LPDWORD lpThreadId);
      |                                                                                                                                               ~~~~~~~^~~~~~~~~~~
D:/C++_proj/microprofile/microprofile.cpp: At global scope:
D:/C++_proj/microprofile/microprofile.cpp:1296:40: warning: 'thread' attribute directive ignored [-Wattributes]
 1296 | MP_THREAD_LOCAL MicroProfileThreadLog* g_MicroProfileThreadLogThreadLocal = 0;
      |                                        ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
D:/C++_proj/microprofile/microprofile.cpp: In function 'bool MicroProfileStartWin32Trace(EventCallback, BufferCallback)':
D:/C++_proj/microprofile/microprofile.cpp:7350:19: warning: passing NULL to non-pointer argument 1 of 'ULONG StopTraceA(TRACEHANDLE, LPCSTR, PEVENT_TRACE_PROPERTIES)' [-Wconversion-null]
 7350 |         StopTrace(NULL, KERNEL_LOGGER_NAME, &sessionProperties);
      |                   ^~~~
In file included from D:/C++_proj/microprofile/microprofile.cpp:7241:
d:\mingw64\x86_64-w64-mingw32\include\evntrace.h:858:49: note:   declared here
  858 |   EXTERN_C ULONG WMIAPI StopTraceA (TRACEHANDLE TraceHandle, LPCSTR InstanceName, PEVENT_TRACE_PROPERTIES Properties);
      |                                     ~~~~~~~~~~~~^~~~~~~~~~~
ninja: build stopped: subcommand failed.

deltaLRD avatar Sep 07 '22 06:09 deltaLRD

I'm not sure what you are compiling with:

can you try putting in a cast to LPVOID

IE replace *pThread = CreateThread(0, 0, ThreadTrampoline, Func, 0, 0); with *pThread = CreateThread(0, 0, ThreadTrampoline, (LPVOID)Func, 0, 0);

It also looks like its ignoring the thread attribute, which will probably also be a problem.

jonasmr avatar Sep 07 '22 07:09 jonasmr