-
Notifications
You must be signed in to change notification settings - Fork 101
Open
Description
Hi, I'm building this library with such cmake option below, note that wxWidgets gui option is ON.
I am using this library under msys2:
cmake .. -G "MinGW Makefiles" -DVL_GUI_WIN32_SUPPORT=ON -DVL_GUI_WIN32_EXAMPLES=ON -DVL_GUI_WXWIDGETS_SUPPORT=ON -DVL_GUI_WXWIDGETS_EXAMPLES=ON-DVL_INSTALL_DATA=ON -DCMAKE_INSTALL_PREFIX='F:\code\VisualizationLibrary\buildwx\install\'
When I run the command mingw32-make.exe
I got such build error:
[ 81%] Building CXX object src/gui/vlWX/CMakeFiles/VLWX.dir/WXGLCanvas.cpp.obj
In file included from F:/code/msys2-64/mingw64/include/windows.h:72,
from F:/code/VisualizationLibrary/src/vlCore/checks.hpp:45,
from F:/code/VisualizationLibrary/src/vlCore/Object.hpp:35,
from F:/code/VisualizationLibrary/src/vlGraphics/OpenGLContext.hpp:35,
from F:/code/VisualizationLibrary/src/gui/vlWX/WXGLCanvas.hpp:36,
from F:\code\VisualizationLibrary\src\gui\vlWX\WXGLCanvas.cpp:32:
F:/code/msys2-64/mingw64/include/wx-3.2/wx/msw/winundef.h: In function 'HWND__* CreateDialog(HINSTANCE, LPCTSTR, HWND, DLGPROC)':
F:/code/msys2-64/mingw64/include/wx-3.2/wx/msw/winundef.h:48:20: error: cannot convert 'LPCTSTR' {aka 'const wchar_t*'} to 'LPCSTR' {aka 'const char*'}
48 | return CreateDialogA(hInstance, pTemplate, hwndParent, pDlgProc);
| ^~~~~~~~~~~~~
| |
| LPCTSTR {aka const wchar_t*}
F:/code/msys2-64/mingw64/include/winuser.h:2404:72: note: initializing argument 2 of 'HWND__* CreateDialogParamA(HINSTANCE, LPCSTR, HWND, DLGPROC, LPARAM)'
2404 | WINUSERAPI HWND WINAPI CreateDialogParamA(HINSTANCE hInstance,LPCSTR lpTemplateName,HWND hWndParent,DLGPROC lpDialogFunc,LPARAM dwInitParam);
| ~~~~~~~^~~~~~~~~~~~~~
In file included from F:/code/msys2-64/mingw64/include/wx-3.2/wx/defs.h:33,
from F:/code/msys2-64/mingw64/include/wx-3.2/wx/event.h:14,
from F:/code/msys2-64/mingw64/include/wx-3.2/wx/window.h:18,
from F:/code/msys2-64/mingw64/include/wx-3.2/wx/nonownedwnd.h:14,
from F:/code/msys2-64/mingw64/include/wx-3.2/wx/toplevel.h:20,
from F:/code/msys2-64/mingw64/include/wx-3.2/wx/frame.h:18,
from F:/code/VisualizationLibrary/src/gui/vlWX/WXGLCanvas.hpp:38:
F:/code/msys2-64/mingw64/include/wx-3.2/wx/msw/winundef.h: In function 'HFONT__* CreateFont(int, int, int, int, int, DWORD, DWORD, DWORD, DWORD, DWORD, DWORD, DWORD, DWORD, LPCTSTR)':
F:/code/msys2-64/mingw64/include/wx-3.2/wx/msw/winundef.h:82:40: error: cannot convert 'LPCTSTR' {aka 'const wchar_t*'} to 'LPCSTR' {aka 'const char*'}
82 | family, facename);
| ^~~~~~~~
| |
| LPCTSTR {aka const wchar_t*}
In file included from F:/code/msys2-64/mingw64/include/windows.h:71:
F:/code/msys2-64/mingw64/include/wingdi.h:2809:254: note: initializing argument 14 of 'HFONT__* CreateFontA(int, int, int, int, int, DWORD, DWORD, DWORD, DWORD, DWORD, DWORD, DWORD, DWORD, LPCSTR)'
2809 | WINGDIAPI HFONT WINAPI CreateFontA(int cHeight,int cWidth,int cEscapement,int cOrientation,int cWeight,DWORD bItalic,DWORD bUnderline,DWORD bStrikeOut,DWORD iCharSet,DWORD iOutPrecision,DWORD iClipPrecision,DWORD iQuality,DWORD iPitchAndFamily,LPCSTR pszFaceName);
| ~~~~~~~^~~~~~~~~~~
F:/code/msys2-64/mingw64/include/wx-3.2/wx/msw/winundef.h: In function 'HWND__* CreateWindow(LPCTSTR, LPCTSTR, DWORD, int, int, int, int, HWND, HMENU, HINSTANCE, LPVOID)':
F:/code/msys2-64/mingw64/include/wx-3.2/wx/msw/winundef.h:105:20: error: cannot convert 'LPCTSTR' {aka 'const wchar_t*'} to 'LPCSTR' {aka 'const char*'}
105 | return CreateWindowA(lpClassName, lpWndClass, dwStyle, x, y, w, h,
| ^~~~~~~~~~~~~
| |
| LPCTSTR {aka const wchar_t*}
F:/code/msys2-64/mingw64/include/winuser.h:2203:65: note: initializing argument 2 of 'HWND__* CreateWindowExA(DWORD, LPCSTR, LPCSTR, DWORD, int, int, int, int, HWND, HMENU, HINSTANCE, LPVOID)'
2203 | WINUSERAPI HWND WINAPI CreateWindowExA(DWORD dwExStyle,LPCSTR lpClassName,LPCSTR lpWindowName,DWORD dwStyle,int X,int Y,int nWidth,int nHeight,HWND hWndParent,HMENU hMenu,HINSTANCE hInstance,LPVOID lpParam);
| ~~~~~~~^~~~~~~~~~~
F:/code/msys2-64/mingw64/include/wx-3.2/wx/msw/winundef.h: In function 'HMENU__* LoadMenu(HINSTANCE, LPCTSTR)':
F:/code/msys2-64/mingw64/include/wx-3.2/wx/msw/winundef.h:121:40: error: cannot convert 'LPCTSTR' {aka 'const wchar_t*'} to 'LPCSTR' {aka 'const char*'}
121 | return LoadMenuA(instance, name);
| ^~~~
| |
| LPCTSTR {aka const wchar_t*}
F:/code/msys2-64/mingw64/include/winuser.h:3261:64: note: initializing argument 2 of 'HMENU__* LoadMenuA(HINSTANCE, LPCSTR)'
3261 | WINUSERAPI HMENU WINAPI LoadMenuA(HINSTANCE hInstance,LPCSTR lpMenuName);
| ~~~~~~~^~~~~~~~~~
F:/code/msys2-64/mingw64/include/wx-3.2/wx/msw/winundef.h: In function 'HICON__* LoadIcon(HINSTANCE, LPCTSTR)':
F:/code/msys2-64/mingw64/include/wx-3.2/wx/msw/winundef.h:312:41: error: cannot convert 'LPCTSTR' {aka 'const wchar_t*'} to 'LPCSTR' {aka 'const char*'}
312 | return LoadIconA(hInstance, lpIconName);
| ^~~~~~~~~~
| |
| LPCTSTR {aka const wchar_t*}
F:/code/msys2-64/mingw64/include/winuser.h:4158:64: note: initializing argument 2 of 'HICON__* LoadIconA(HINSTANCE, LPCSTR)'
4158 | WINUSERAPI HICON WINAPI LoadIconA(HINSTANCE hInstance,LPCSTR lpIconName);
| ~~~~~~~^~~~~~~~~~
F:/code/msys2-64/mingw64/include/wx-3.2/wx/msw/winundef.h: In function 'HBITMAP__* LoadBitmap(HINSTANCE, LPCTSTR)':
F:/code/msys2-64/mingw64/include/wx-3.2/wx/msw/winundef.h:325:43: error: cannot convert 'LPCTSTR' {aka 'const wchar_t*'} to 'LPCSTR' {aka 'const char*'}
325 | return LoadBitmapA(hInstance, lpBitmapName);
| ^~~~~~~~~~~~
| |
| LPCTSTR {aka const wchar_t*}
F:/code/msys2-64/mingw64/include/winuser.h:4111:68: note: initializing argument 2 of 'HBITMAP__* LoadBitmapA(HINSTANCE, LPCSTR)'
4111 | WINUSERAPI HBITMAP WINAPI LoadBitmapA(HINSTANCE hInstance,LPCSTR lpBitmapName);
| ~~~~~~~^~~~~~~~~~~~
F:\code\VisualizationLibrary\src\gui\vlWX\WXGLCanvas.cpp: In member function 'void vlWX::WXGLCanvas::OnIdle(wxIdleEvent&)':
F:\code\VisualizationLibrary\src\gui\vlWX\WXGLCanvas.cpp:102:38: warning: unused parameter 'ev' [-Wunused-parameter]
102 | void WXGLCanvas::OnIdle(wxIdleEvent& ev)
| ~~~~~~~~~~~~~^~
mingw32-make[2]: *** [src\gui\vlWX\CMakeFiles\VLWX.dir\build.make:76: src/gui/vlWX/CMakeFiles/VLWX.dir/WXGLCanvas.cpp.obj] Error 1
mingw32-make[1]: *** [CMakeFiles\Makefile2:904: src/gui/vlWX/CMakeFiles/VLWX.dir/all] Error 2
mingw32-make: *** [Makefile:155: all] Error 2
You can see, it looks like the ANSI (non-Unicode) version of the Windows API is used.
To solve this issue, I have such patch:
diff --git a/src/gui/vlWX/WXGLCanvas.hpp b/src/gui/vlWX/WXGLCanvas.hpp
index 4b555e01..cf0a931f 100644
--- a/src/gui/vlWX/WXGLCanvas.hpp
+++ b/src/gui/vlWX/WXGLCanvas.hpp
@@ -32,15 +32,16 @@
#ifndef vlWXGLCanvas_INCLUDE_ONCE
#define vlWXGLCanvas_INCLUDE_ONCE
-#include <vlWX/link_config.hpp>
-#include <vlGraphics/OpenGLContext.hpp>
-#include <vlCore/Time.hpp>
#include <wx/frame.h>
#include <wx/glcanvas.h>
#include <wx/timer.h>
#include <wx/dcclient.h>
#include <wx/image.h>
#include <wx/app.h>
+#include <vlWX/link_config.hpp>
+#include <vlGraphics/OpenGLContext.hpp>
+#include <vlCore/Time.hpp>
+
#if !wxUSE_GLCANVAS
#error "OpenGL required: set wxUSE_GLCANVAS to 1 and rebuild the library"
The patch is very simple, I just put the wxWidgets related header files before the vl related header files, because the wxWidgets header files may already set the unicode preprocessor correctly.
BTW: the wx library version 3.2.2.1 is already installed by the pacman command under msys2, see here:
Package: mingw-w64-x86_64-wxwidgets3.2-msw - MSYS2 Packages
Metadata
Metadata
Assignees
Labels
No labels