News:

As usual while waiting for the next release - don't forget to check the nightly builds in the forum.

Main Menu

[solved] codeblocks 13.12 & wxWidgets 3.0 config, ld.exe cannot find -lwxmsw30u?

Started by imduke, February 28, 2014, 07:32:25 AM

Previous topic - Next topic

imduke

Hi there, I'm a totally newbie on codeblocks, I've struggled 4 days with cb & wxWidgets configurations with corrected some errors which found in the internet, but now I really need a help !

I've installed cb with TDM-GCC a few days with no problem, working pretty good. Also I wanna add wxWidgets library, now the configuration progress, I followed the wxWidgets' wiki official guide: http://wiki.codeblocks.org/index.php?title=Using_wxWidgets

And I created a test project, it's the cb auto generated one, and running build, but finally I got one build error: 'ld.exe cannot find -lwxmsw30u'

My compilation & configuration progress was:

downloaded files:
1). TDM-GCC-webdl.exe (select 32bit not 32/64)
2). wxWidgets-3.0.0.zip
3). codeblocks-13.12-setup.exe

add  environment variables as C:\TDM-GCC-32\bin
mingw32-make -f makefile.gcc clean
mingw32-make -f makefile.gcc SHARED=1 UNICODE=1 MONOLITHIC=1 BUILD=debug

add environment variables as:
WXCFG = C:\wxWidgets-3.0.0
WXWIN = gcc_dll\mswud (I have no mswu directory)
add menu -> Global compiler settings -> Search directory by C:\wxWidgets-3.0.0\lib\gcc_dll\mswud

By reading the wiki guide, it says if get error like 'cann't find -lwxmsw28u' then 'You have an incorrect link library in your build options', so I've changed the line to 'WXWIN = gcc_dll\mswud', because 'mingw32-make' as a debug version, there's no mswu directory under gcc_dll, but still the same error.

It seems the cb forum has some similar 'cannot find...' questions, but after read them all, I still can't fix mine! wow, I don't know what should going to do?

Really hope that codeblocks will be designed to internally add the configurations automaticly in a short future!


Awaiting helps, thanks!


MortenMacFly

Quote from: imduke on February 28, 2014, 07:32:25 AM
mingw32-make -f makefile.gcc SHARED=1 UNICODE=1 MONOLITHIC=1 BUILD=debug
If you compile the DEBUG version of wxWidgets,...

Quote from: imduke on February 28, 2014, 07:32:25 AM
By reading the wiki guide, it says if get error like 'cann't find -lwxmsw28u'
You should link against the debug version of the lib named wxmsw28ud.

Please note that wxWidgets also ship with pre-compiled versions of this library for your compiler. If unsure, use these.
Compiler logging: Settings->Compiler & Debugger->tab "Other"->Compiler logging="Full command line"
C::B Manual: [url="https://www.codeblocks.org/docs/main_codeblocks_en.html"]https://www.codeblocks.org/docs/main_codeblocks_en.html[/url]
C::B FAQ: [url="https://wiki.codeblocks.org/index.php?title=FAQ"]https://wiki.codeblocks.org/index.php?title=FAQ[/url]

imduke

Quote from: imduke on February 28, 2014, 07:32:25 AM
By reading the wiki guide, it says if get error like 'cann't find -lwxmsw28u'
You should link against the debug version of the lib named wxmsw28ud.

Thank you for the reply, but could you please explain it more detail to me, I'm really don't know how to configure it in progress.

thanks

stahta01

You NEED to decide what directions you are going to follow; then, you need to follow them.
You should NOT mix two different ways of using wxWidgets with CB and expect them to work!

Either follow the standard windows way of using the Global Variable WX or WX30 or do the wx-config.exe way.

wx-config way includes this step in the codeblocks setup.

add environment variables as:
WXCFG = C:\wxWidgets-3.0.0
WXWIN = gcc_dll\mswud


YOU MUST DECIDE.

You must tell us which way you are doing!

You need to tell us if you are using the CB wxWidgets wizard!
(If the error happens during the wizard you need to tell us.)

You need to post the full re-build log if you want help doing either way. (once finished with running wizard.)
http://wiki.codeblocks.org/index.php?title=FAQ-Compiling_%28errors%29#Q:_How_do_I_troubleshoot_a_compiler_problem.3F

Tim S.
C Programmer working to learn more about C++.
On Windows 10 64 bit and Windows 11 64 bit.
--
When in doubt, read the CB WiKi FAQ. [url="http://wiki.codeblocks.org"]http://wiki.codeblocks.org[/url]

imduke

Hi:

I never touched the wx-config stuffs neither I didn't know that yet, but you let me know that name now ;-)  I was just followed the wxWidgets' guide, add the Global variable purely, and start my new prject through CB's vizard, thus I think I'm in the standard windows way. Tell me if I'm wrong!

By the way, what differences are their between them?

And hope that you staffs can make a wxWidgets setup guide with step by step screenshot pictures either in Linux, Mac and windows, this will really help newbies or noobs like me to save much times, even can help you to prevent repeat answering much similar noob questions ;-)

Anyway, In my case, first of all, I just created the test project by click the wxWidget icon in the wizard, and follow the steps:
- wxWidgets version -> wxWidgets 3.0.x
- Preferred GUI Builder -> None; Application Type -> Frame Base
 (What differs between Dialog Based and Frame Based? Sorry 4 this, I'm a noob)
- wxWidgetsl location -> $(#wx) <-- which causes an error, so i gave it the exact path
 C:\wxWidgets-3.0.0
- Create "Debug" configuration
- wxWidgets Library Setting -> checked all 3 choices on
 Miscellaneous Settings -> enabled Advanced Options, and it gave me an Warning popup
 says: 'A matching Debug configuration cannot be found in the wxWidgets directory you specified...'

After done these, run build, then it says no wx/setup.h, then after googling found a tips which told me to add next line in 'Settings -> Global compiler settings -> Search directories -> Compiler'
C:\wxWidgets-3.0.0\lib\gcc_dll\mswu
and as mine doesn't have 'mswu' directory, so I changed to 'mswud', then run build, this time it says the above error: 'ld.exe cannot find -lwxmsw30u'

For to catch my mistakes, I've done the same job in virtualbox run win xp with putting the gcc stuffs in directory 'c:\etc\...'

Now is the log:


-------------- Build: Debug in aaa (compiler: GNU GCC Compiler)---------------

mingw32-g++.exe -pipe -mthreads -D__GNUWIN32__ -D__WXMSW__ -DWXUSINGDLL -DwxUSE_UNICODE -Wall -g -IC:\etc\wxWidgets-3.0.0\include -IC:\etc\wxWidgets-3.0.0\lib\gcc_dll\mswu -IC:\etc\wxWidgets-3.0.0\lib\gcc_dll\mswud -c C:\local\codeblocks\aaa\aaaApp.cpp -o obj\Debug\aaaApp.o
mingw32-g++.exe -pipe -mthreads -D__GNUWIN32__ -D__WXMSW__ -DWXUSINGDLL -DwxUSE_UNICODE -Wall -g -IC:\etc\wxWidgets-3.0.0\include -IC:\etc\wxWidgets-3.0.0\lib\gcc_dll\mswu -IC:\etc\wxWidgets-3.0.0\lib\gcc_dll\mswud -c C:\local\codeblocks\aaa\aaaMain.cpp -o obj\Debug\aaaMain.o
windres.exe -IC:\etc\wxWidgets-3.0.0\include -IC:\etc\wxWidgets-3.0.0\lib\gcc_dll\mswu -J rc -O coff -i C:\local\CODEBL~1\aaa\resource.rc -o obj\Debug\resource.res
mingw32-g++.exe -LC:\etc\wxWidgets-3.0.0\lib\gcc_dll -o bin\Debug\aaa.exe obj\Debug\aaaApp.o obj\Debug\aaaMain.o  obj\Debug\resource.res -mthreads  -lwxmsw30u -mwindows
c:/etc/tdm-gcc-32/bin/../lib/gcc/mingw32/4.8.1/../../../../mingw32/bin/ld.exe: cannot find -lwxmsw30u
collect2.exe: error: ld returned 1 exit status
Process terminated with status 1 (0 minute(s), 10 second(s))
1 error(s), 0 warning(s) (0 minute(s), 10 second(s))


Hope that I put enough infos to help myself!

Thank you stahta01 for reply, you are a good man!

stahta01

You have both

-IC:\etc\wxWidgets-3.0.0\lib\gcc_dll\mswu
-IC:\etc\wxWidgets-3.0.0\lib\gcc_dll\mswud


Get rid of the one that does NOT exist.

You say you only built debug; is there a logical reason you are doing that instead of both?

Edit: You need to define "__WXDEBUG__" when using the wxWidgets debug library.

Tim S.

C Programmer working to learn more about C++.
On Windows 10 64 bit and Windows 11 64 bit.
--
When in doubt, read the CB WiKi FAQ. [url="http://wiki.codeblocks.org"]http://wiki.codeblocks.org[/url]

stahta01

My build log on doing wxWidgets 3.0 Debug build Multilib (removed PCH precompile)
(Multilib is the opposite choose of Monolithic build)

Where mine says "gcc48_dll" yours should say "gcc_dll"

Where mine says "-lwxmsw30ud_core -lwxbase30ud" yours should say "-lwxmsw30ud".

Where mine says "testwx48" yours should say "aaa".

My wxWidgets base folder: "C:\wxMSW-3.0\wxWidgets-3.0.0"

Note: You build need not have "-include wx_pch.h" in it.

Note: This option is NOT needed "-Wmissing-include-dirs"

Note: Yours might not have "--use-temp-file" in it; I added that to test something long ago.

Change "wxmsw30u" to "wxmsw30ud" in "Linker Settings" under "Link Libraries"

Note: These NOT needed "-Wfatal-errors -Wno-unused-local-typedefs -Wno-attributes"

Tim S.


windres.exe --use-temp-file -IC:\wxMSW-3.0\wxWidgets-3.0.0\include -IC:\wxMSW-3.0\wxWidgets-3.0.0\lib\gcc48_dll\mswud -J rc -O coff -i E:\OPENSO~1\testwx48\resource.rc -o obj\Debug\resource.res
mingw32-g++.exe -pipe -mthreads -D__GNUWIN32__ -D__WXMSW__ -DWXUSINGDLL -DwxUSE_UNICODE -Winvalid-pch -include wx_pch.h -DWX_PRECOMP -Wall -g -D__WXDEBUG__ -Wmissing-include-dirs -Wfatal-errors -Wno-unused-local-typedefs -Wno-attributes -IC:\wxMSW-3.0\wxWidgets-3.0.0\include -IC:\wxMSW-3.0\wxWidgets-3.0.0\lib\gcc48_dll\mswud -c E:\OpenSourceCode\testwx48\testwx48App.cpp -o obj\Debug\testwx48App.o
mingw32-g++.exe -pipe -mthreads -D__GNUWIN32__ -D__WXMSW__ -DWXUSINGDLL -DwxUSE_UNICODE -Winvalid-pch -include wx_pch.h -DWX_PRECOMP -Wall -g -D__WXDEBUG__ -Wmissing-include-dirs -Wfatal-errors -Wno-unused-local-typedefs -Wno-attributes -IC:\wxMSW-3.0\wxWidgets-3.0.0\include -IC:\wxMSW-3.0\wxWidgets-3.0.0\lib\gcc48_dll\mswud -c E:\OpenSourceCode\testwx48\testwx48Main.cpp -o obj\Debug\testwx48Main.o
mingw32-g++.exe -LC:\wxMSW-3.0\wxWidgets-3.0.0\lib\gcc48_dll -o bin\Debug\testwx48.exe  obj\Debug\testwx48App.o obj\Debug\testwx48Main.o obj\Debug\resource.res -mthreads  -lwxmsw30ud_core -lwxbase30ud -lwxpngd -lwxzlibd -mwindows
Output file is bin\Debug\testwx48.exe with size 1.75 MB
C Programmer working to learn more about C++.
On Windows 10 64 bit and Windows 11 64 bit.
--
When in doubt, read the CB WiKi FAQ. [url="http://wiki.codeblocks.org"]http://wiki.codeblocks.org[/url]

imduke

thanks, stahta01, it worked!
your answer helped me!

ps: other newbies who meet same trouble like me plz check the attachment file, by check on the red colored area, it will be remove the error!

v-italiano

Hi,
i've same problem but I don't think that problem is only the __WXDEBUG__ option (checked or unchecked);
if i check this advanced option simply the problem becomes "... ld.exe cannot find -lwxmsw30ud" but in my environment
issue remains.

My build log is:

mingw32-g++.exe -pipe -mthreads -D__GNUWIN32__ -D__WXMSW__ -DWXUSINGDLL -DwxUSE_UNICODE -Wall -g -D__WXDEBUG__ -IC:\SourceCode\Libraries\wxWidgets3.0\include -IC:\SourceCode\Libraries\wxWidgets3.0\lib\gcc_dll\mswud -c C:\Users\W7onSSD\Documents\C_PROJECTS\monitor\monitorApp.cpp -o obj\Debug\monitorApp.o
mingw32-g++.exe -pipe -mthreads -D__GNUWIN32__ -D__WXMSW__ -DWXUSINGDLL -DwxUSE_UNICODE -Wall -g -D__WXDEBUG__ -IC:\SourceCode\Libraries\wxWidgets3.0\include -IC:\SourceCode\Libraries\wxWidgets3.0\lib\gcc_dll\mswud -c C:\Users\W7onSSD\Documents\C_PROJECTS\monitor\monitorMain.cpp -o obj\Debug\monitorMain.o
windres.exe -IC:\SourceCode\Libraries\wxWidgets3.0\include -IC:\SourceCode\Libraries\wxWidgets3.0\lib\gcc_dll\mswud -J rc -O coff -i C:\Users\W7onSSD\Documents\C_PROJECTS\monitor\resource.rc -o obj\Debug\resource.res
mingw32-g++.exe -LC:\SourceCode\Libraries\wxWidgets3.0\lib\gcc_dll -o bin\Debug\monitor.exe obj\Debug\monitorApp.o obj\Debug\monitorMain.o  obj\Debug\resource.res -mthreads  -lwxmsw30ud -mwindows
c:/program files (x86)/codeblocks/mingw/bin/../lib/gcc/mingw32/4.7.1/../../../../mingw32/bin/ld.exe: cannot find -lwxmsw30ud
collect2.exe: error: ld returned 1 exit status
Process terminated with status 1 (0 minute(s), 4 second(s))
1 error(s), 0 warning(s) (0 minute(s), 4 second(s))


Problem (for me) is that wizard search in wxWidgets3.0\lib\gcc_dll\mswu or wxWidgets3.0\lib\gcc_dll\mswu when it doesn't exist. I solved changing $(#wx)\lib\gcc_dll\mswud to $(#wx)\lib\gcc48_dll\mswud in searching directory for compiler and resource compiler tabs and changing $(#wx)\lib\gcc_dll to $(#wx)\lib\gcc48_dll in linker tab.

What do you think ?

-Vit

stahta01

That is one of the correct solution when linking against one of wxPack binary Libraries.

Building against wxWidgets 3.0 binary Libraries has a similar solution.

Tim S.

Quote from: v-italiano on October 02, 2014, 11:03:22 AM
Hi,
i've same problem but I don't think that problem is only the __WXDEBUG__ option (checked or unchecked);
if i check this advanced option simply the problem becomes "... ld.exe cannot find -lwxmsw30ud" but in my environment
issue remains.

My build log is:

mingw32-g++.exe -pipe -mthreads -D__GNUWIN32__ -D__WXMSW__ -DWXUSINGDLL -DwxUSE_UNICODE -Wall -g -D__WXDEBUG__ -IC:\SourceCode\Libraries\wxWidgets3.0\include -IC:\SourceCode\Libraries\wxWidgets3.0\lib\gcc_dll\mswud -c C:\Users\W7onSSD\Documents\C_PROJECTS\monitor\monitorApp.cpp -o obj\Debug\monitorApp.o
mingw32-g++.exe -pipe -mthreads -D__GNUWIN32__ -D__WXMSW__ -DWXUSINGDLL -DwxUSE_UNICODE -Wall -g -D__WXDEBUG__ -IC:\SourceCode\Libraries\wxWidgets3.0\include -IC:\SourceCode\Libraries\wxWidgets3.0\lib\gcc_dll\mswud -c C:\Users\W7onSSD\Documents\C_PROJECTS\monitor\monitorMain.cpp -o obj\Debug\monitorMain.o
windres.exe -IC:\SourceCode\Libraries\wxWidgets3.0\include -IC:\SourceCode\Libraries\wxWidgets3.0\lib\gcc_dll\mswud -J rc -O coff -i C:\Users\W7onSSD\Documents\C_PROJECTS\monitor\resource.rc -o obj\Debug\resource.res
mingw32-g++.exe -LC:\SourceCode\Libraries\wxWidgets3.0\lib\gcc_dll -o bin\Debug\monitor.exe obj\Debug\monitorApp.o obj\Debug\monitorMain.o  obj\Debug\resource.res -mthreads  -lwxmsw30ud -mwindows
c:/program files (x86)/codeblocks/mingw/bin/../lib/gcc/mingw32/4.7.1/../../../../mingw32/bin/ld.exe: cannot find -lwxmsw30ud
collect2.exe: error: ld returned 1 exit status
Process terminated with status 1 (0 minute(s), 4 second(s))
1 error(s), 0 warning(s) (0 minute(s), 4 second(s))


Problem (for me) is that wizard search in wxWidgets3.0\lib\gcc_dll\mswu or wxWidgets3.0\lib\gcc_dll\mswu when it doesn't exist. I solved changing $(#wx)\lib\gcc_dll\mswud to $(#wx)\lib\gcc48_dll\mswud in searching directory for compiler and resource compiler tabs and changing $(#wx)\lib\gcc_dll to $(#wx)\lib\gcc48_dll in linker tab.

What do you think ?

-Vit
C Programmer working to learn more about C++.
On Windows 10 64 bit and Windows 11 64 bit.
--
When in doubt, read the CB WiKi FAQ. [url="http://wiki.codeblocks.org"]http://wiki.codeblocks.org[/url]

v-italiano

Hi

Quote from: imduke on February 28, 2014, 03:14:08 PM


...I just created the test project by click the wxWidget icon in the wizard, and follow the steps:
- wxWidgets version -> wxWidgets 3.0.x
- Preferred GUI Builder -> None; Application Type -> Frame Base
  (What differs between Dialog Based and Frame Based? Sorry 4 this, I'm a noob)

...

Differs are showed in attached png


bye

-Vit

Aaron

I am also dealing with a "ld.exe                               cannot find -lwxmsw30u"

In a larger tutorial project.

Build log:

mingw32-g++.exe -L(invalid)\lib\gcc_lib -o bin\Release\wxlConsole.exe obj\Release\portsEnum.o obj\Release\rs232.o obj\Release\wxlConsoleApp.o obj\Release\wxlConsoleMain.o  obj\Release\resource.res -s -mthreads  -lwxmsw30u -lwxpng
-lwxjpeg -lwxtiff -lwxzlib -lkernel32 -luser32 -lgdi32 -lwinspool -lcomdlg32 -ladvapi32 -lshell32 -lole32 -loleaut32 -luuid
-lcomctl32 -lwsock32 -lodbc32 -mwindows
C:\Program Files\CodeBlocks\MinGW\bin\ld.exe: cannot find -lwxmsw30u
collect2: ld returned 1 exit status
Process terminated with status 1 (0 minute(s), 2 second(s))
1 error(s), 0 warning(s) (0 minute(s), 2 second(s))

Can this be corrected in an existing project?

v-italiano

For me general solution is:

1) to select in Workspace > "your project name" > Build Options > Search Directories
2) here to change in all three file pathes (Compiler, Linker, Resource Compiler)
each  "...\gcc_dll\.."    with     "...\gcc48_dll\.."
3) to recompile

>Vit

Aaron

Quote1) to select in Workspace > "your project name" > Build Options > Search Directories
2) here to change in all three file pathes (Compiler, Linker, Resource Compiler)
each  "...\gcc_dll\.."    with     "...\gcc48_dll\.."
3) to recompile

Same result.  :-\

C:\Program Files\CodeBlocks\MinGW\bin\ld.exe: cannot find -lwxmsw30u

oBFusCATed

Quote from: Aaron2 on March 06, 2015, 05:14:29 AM
mingw32-g++.exe -L(invalid)\lib\gcc_lib -o bin\Release\wxlConsole.exe obj\Release\portsEnum.o obj\Release\rs232.o obj\Release\wxlConsoleApp.o obj\Release\wxlConsoleMain.o  obj\Release\resource.res -s -mthreads  ......

So you've failed to set you wx global variable and thus the path is invalid.
Settings -> Global variables -> wx -> set proper paths
(most of the time I ignore long posts)
[strangers don't send me private messages, I'll ignore them; post a topic in the forum, but first read the rules!]