Code::Blocks Forums

User forums => General (but related to Code::Blocks) => Topic started by: tumanovalex on March 01, 2020, 06:48:10 pm

Title: CodeBlocks Msys2 and wxWidgets
Post by: tumanovalex on March 01, 2020, 06:48:10 pm
CodeBlocks Msys2 and wxWidgets
Windows 10 Home 64 bit. Installed CodeBlocks from codeblocks-17.12-nosetup.zip by simply copying it to drive C. Using Msys2 I downloaded the necessary tools (pacman -S --needed mingw-w64-x86_64-toolchain), specified the necessary directory in CodeBlocks (C: \ msys64 \ mingw64 \ bin \) and the necessary tools. The console application was created normally, everything works. I decided to try to make a wxWidgets project. I decided to try to make a wxWidgets project. Installed wxWidgets (pacman -S mingw-w64-x86_64-wxWidgets). Specified in the project properties a directory for searching wxWidgets files. When I try to debug, I get messages:
C: / msys64 / mingw64 / bin /../ lib / gcc / x86_64-w64-mingw32 / 9.2.0 /../../../../ x86_64-w64-mingw32 / bin / ld.exe: cannot find -lwxmsw30ud
C: / msys64 / mingw64 / bin /../ lib / gcc / x86_64-w64-mingw32 / 9.2.0 /../../../../ x86_64-w64-mingw32 / bin / ld.exe: cannot find -lwxpngd
C: / msys64 / mingw64 / bin /../ lib / gcc / x86_64-w64-mingw32 / 9.2.0 /../../../../ x86_64-w64-mingw32 / bin / ld.exe: cannot find -lwxjpegd
C: / msys64 / mingw64 / bin /../ lib / gcc / x86_64-w64-mingw32 / 9.2.0 /../../../../ x86_64-w64-mingw32 / bin / ld.exe: cannot find -lwxtiffd
C: / msys64 / mingw64 / bin /../ lib / gcc / x86_64-w64-mingw32 / 9.2.0 /../../../../ x86_64-w64-mingw32 / bin / ld.exe: cannot find -lwxzlibd
collect2.exe: error: ld returned 1 exit status
Process terminated with status 1 (0 minute (s), 42 second (s))
Please tell me how to properly configure the project. The project has attached.
Title: Re: CodeBlocks Msys2 and wxWidgets
Post by: stahta01 on March 01, 2020, 07:58:32 pm
Custom variable and value
Code
WX_SUFFIX=u
WX_TOOLKIT=msw
WX_VERSION=3.0

Compiler search directories
Code
$(TARGET_COMPILER_DIR)lib\wx\include\$(WX_TOOLKIT)-unicode-$(WX_VERSION)
$(TARGET_COMPILER_DIR)include\wx-$(WX_VERSION)

Resource Compiler search directories
Code
$(TARGET_COMPILER_DIR)include\wx-$(WX_VERSION)

Names I use for shared wx libraries
Code
wx_$(WX_TOOLKIT)$(WX_SUFFIX)_gl-$(WX_VERSION).dll
wx_$(WX_TOOLKIT)$(WX_SUFFIX)_stc-$(WX_VERSION).dll
wx_$(WX_TOOLKIT)$(WX_SUFFIX)_propgrid-$(WX_VERSION).dll
wx_$(WX_TOOLKIT)$(WX_SUFFIX)_xrc-$(WX_VERSION).dll
wx_$(WX_TOOLKIT)$(WX_SUFFIX)_richtext-$(WX_VERSION).dll
wx_$(WX_TOOLKIT)$(WX_SUFFIX)_aui-$(WX_VERSION).dll
wx_$(WX_TOOLKIT)$(WX_SUFFIX)_html-$(WX_VERSION).dll
wx_$(WX_TOOLKIT)$(WX_SUFFIX)_adv-$(WX_VERSION).dll
wx_$(WX_TOOLKIT)$(WX_SUFFIX)_core-$(WX_VERSION).dll
wx_base$(WX_SUFFIX)_xml-$(WX_VERSION).dll
wx_base$(WX_SUFFIX)_net-$(WX_VERSION).dll
wx_base$(WX_SUFFIX)-$(WX_VERSION).dll

# Static MSys2 wx library names
Edit: For some reason I had to use full path names for the Static library to be used.
It tried to use the DLLs when I did not use fullpath.
Code
$(TARGET_COMPILER_DIR)lib/libwx_$(WX_TOOLKIT)$(WX_SUFFIX)_core-$(WX_VERSION).a
$(TARGET_COMPILER_DIR)lib/libwx_base$(WX_SUFFIX)-$(WX_VERSION).a
Title: Re: CodeBlocks Msys2 and wxWidgets
Post by: stahta01 on March 02, 2020, 12:25:16 am
 Attached a zipped fixed CB Project with name of cbWxWid-msys2.cbp.
It uses the MSys2 MinGW wxWidgets package.
Edit: Static build was used; since, that was what your project used.
I had to add the linker option of "-Wl,--allow-multiple-definition" to get around linker dup error.
Edit2: Removed too many things to list; because they are wrong for using MSys2 MinGW wxWidgets package.

Tim S.
Title: Re: CodeBlocks Msys2 and wxWidgets
Post by: ollydbg on April 30, 2021, 10:10:32 am
Hi, Tim, I notice that "TARGET_COMPILER_DIR" is a good variable if we use msys2, because all the include and lib are its sub folders.
So, I use this variable now, today I found you have post this method already.  :)
Not only linking to wxWidgets library, but also other libraries can use such method.

For example, if I use OpenCV library inside msys2, I now use such include search path:
Code
$(TARGET_COMPILER_DIR)include\opencv4

if I use cairo library, I use such include search path

Code
$(TARGET_COMPILER_DIR)include\cairo

I hope this can help others.
Title: Re: CodeBlocks Msys2 and wxWidgets
Post by: ollydbg on June 03, 2021, 06:45:04 am
Attached a zipped fixed CB Project with name of cbWxWid-msys2.cbp.
It uses the MSys2 MinGW wxWidgets package.
Edit: Static build was used; since, that was what your project used.
I had to add the linker option of "-Wl,--allow-multiple-definition" to get around linker dup error.
Edit2: Removed too many things to list; because they are wrong for using MSys2 MinGW wxWidgets package.

Tim S.

I just tried your cbp file:
Here is my changes:
1, I remove the "-static" option, I don't see there is a visual option in the build setting dialog, I just removed this line from the cbp xml file.
2, I think directly link to a library with the full path should be changed to: set the library search path, and set the library names.
So:
Code
			<Add library="libwx_base$(WX_SUFFIX)-$(WX_VERSION).a" />
<Add library="libwx_base$(WX_SUFFIX)_xml-$(WX_VERSION).a" />
<Add library="libwx_base$(WX_SUFFIX)_net-$(WX_VERSION).a" />
<Add library="libwx_$(WX_TOOLKIT)$(WX_SUFFIX)_core-$(WX_VERSION).a" />
<Add library="libwx_$(WX_TOOLKIT)$(WX_SUFFIX)_adv-$(WX_VERSION).a" />
<Add library="libwx_$(WX_TOOLKIT)$(WX_SUFFIX)_aui-$(WX_VERSION).a" />
<Add library="opencv_imgproc$(CV_VERSION).dll" />
<Add library="opencv_core$(CV_VERSION).dll" />
<Add library="opencv_imgcodecs$(CV_VERSION).dll" />
<Add library="opencv_calib3d$(CV_VERSION).dll" />
<Add library="opencv_videoio$(CV_VERSION).dll" />
<Add directory="$(TARGET_COMPILER_DIR)lib" />
<Add directory="$(TARGET_COMPILER_DIR)bin" />
Something like above.
3, I have put the "$(TARGET_COMPILER_DIR)bin" in the library search path, this is because when you click the "run" button to start the application, the library search path will be added to the "PATH" variable, and we can avoid setting the system's PATH.
Title: Re: CodeBlocks Msys2 and wxWidgets
Post by: stahta01 on June 03, 2021, 07:02:57 am
If you are just doing shared it is normal to use "wx_$(WX_TOOLKIT)$(WX_SUFFIX)_aui-$(WX_VERSION)" instead of "libwx_$(WX_TOOLKIT)$(WX_SUFFIX)_aui-$(WX_VERSION).a".

Tim S.
Title: Re: CodeBlocks Msys2 and wxWidgets
Post by: ollydbg on June 03, 2021, 08:06:43 am
If you are just doing shared it is normal to use "wx_$(WX_TOOLKIT)$(WX_SUFFIX)_aui-$(WX_VERSION)" instead of "libwx_$(WX_TOOLKIT)$(WX_SUFFIX)_aui-$(WX_VERSION).a".

Tim S.
Hi, thanks for the help, indeed, I just test it, the cbp can be simplified as:

Code
		<Linker>
<Add option="-mthreads" />
<Add library="wx_base$(WX_SUFFIX)-$(WX_VERSION)" />
<Add library="wx_base$(WX_SUFFIX)_xml-$(WX_VERSION)" />
<Add library="wx_base$(WX_SUFFIX)_net-$(WX_VERSION)" />
<Add library="wx_$(WX_TOOLKIT)$(WX_SUFFIX)_core-$(WX_VERSION)" />
<Add library="wx_$(WX_TOOLKIT)$(WX_SUFFIX)_adv-$(WX_VERSION)" />
<Add library="wx_$(WX_TOOLKIT)$(WX_SUFFIX)_aui-$(WX_VERSION)" />
<Add library="opencv_imgproc$(CV_VERSION)" />
<Add library="opencv_core$(CV_VERSION)" />
<Add library="opencv_imgcodecs$(CV_VERSION)" />
<Add library="opencv_calib3d$(CV_VERSION)" />
<Add library="opencv_videoio$(CV_VERSION)" />
<Add directory="$(TARGET_COMPILER_DIR)lib" />
<Add directory="$(TARGET_COMPILER_DIR)bin" />
</Linker>