msys, wx 2.8.0, gcc, linking phase problem
Daniel C. Bastos
dbast0s at yahoo.com.br
Fri Feb 9 19:17:41 PST 2007
In article <g8aF7.A.AmB.0_RzFB at brage.sunsite.dk>,
Vadim Zeitlin wrote:
> On Fri, 9 Feb 2007 20:21:02 -0500 "Daniel C. Bastos" <dbast0s at yahoo.com.br> wrote:
>
> DCB> Do you know how can I instruct cl.exe to find its DLLs?
>
> You need to execute the file vsvars32.btm found in Common7/Tools
> subdirectory of VS8 installation directory.
Mine was vsvars32.bat; I reproduced its work on a sh script and I have
cl.exe working now. Thank you.
%cl
Microsoft (R) 32-bit C/C++ Optimizing Compiler Version 14.00.50727.42 for 80x86
Copyright (C) Microsoft Corporation. All rights reserved.
usage: cl [ option... ] filename... [ /link linkoption... ]
> DCB> Previously, the problem seemed to be the generation of a custom dll for
> DCB> gcc
>
> This is supposed to work [too]. I'm puzzled by the errors you get, e.g.
> this one:
>
> advdll_bmpcboxg.o(.text+0xf79): In function `ZN16wxBitmapComboBox15DetermineIndentEv':
> src/generic/bmpcboxg.cpp:328: undefined reference to `wxComboCtrlBase::SetCustomPaintWidth(int)'
>
> The "missing" symbol is supposed to be in coredll_combocmn.o which is part
> of the core library. You should use "nm" to check if the symbol is really
> there.
For a fresher diagnostic, I'll rebuild everything from scratch.
%mkdir build-shared
%cd build-shared/
%../configure --enable-debug --enable-debug_gdb --with-msw
Here's a summary:
Configured wxWidgets 2.8.0 for `i686-pc-mingw32'
Which GUI toolkit should wxWidgets use? msw
Should wxWidgets be compiled into single library? no
Should wxWidgets be compiled in debug mode? yes
Should wxWidgets be linked as a shared library? yes
Should wxWidgets be compiled in Unicode mode? no
What level of wxWidgets compatibility should be enabled?
wxWidgets 2.4 no
wxWidgets 2.6 yes
Which libraries should wxWidgets use?
jpeg builtin
png builtin
regex builtin
tiff builtin
zlib builtin
odbc no
expat builtin
libmspack no
sdl no
Then at the end of ``make'' the linking fails with various undefined
references. The command executed was:
g++ -shared -o /c/mgwx/build-shared/lib/wxmsw28d_adv_gcc_custom.dll
advdll_version_rc.o advdll_animatecmn.o advdll_datavcmn.o
advdll_aboutdlgg.o advdll_animateg.o advdll_bmpcboxg.o advdll_calctrl.o
advdll_datavgen.o advdll_datectlg.o advdll_grid.o advdll_gridctrl.o
advdll_gridsel.o advdll_helpext.o advdll_hyperlink.o advdll_laywin.o
advdll_odcombo.o advdll_propdlg.o advdll_sashwin.o advdll_splash.o
advdll_tipdlg.o advdll_wizard.o advdll_taskbarcmn.o advdll_aboutdlg.o
advdll_sound.o advdll_taskbar.o advdll_joystick.o advdll_datectrl.o
-L/c/mgwx/build-shared/lib -L/c/mgwx/build-shared/lib -mthreads
-L/c/mgwx/build-shared/lib
-Wl,--out-implib=/c/mgwx/build-shared/lib/libwx_mswd_adv-2.8.dll.a
-lrpcrt4 -loleaut32 -lole32 -luuid -lwinspool -lwinmm -lshell32
-lcomctl32 -lcomdlg32 -lctl3d32 -ladvapi32 -lwsock32 -lgdi32
-lwxtiffd-2.8 -lwxjpegd-2.8 -lwxpngd-2.8 -lwxzlibd-2.8 -lwxregexd-2.8
-lwxexpatd-2.8 -mthreads -lrpcrt4 -loleaut32 -lole32 -luuid -lwinspool
-lwinmm -lshell32 -lcomctl32 -lcomdlg32 -lctl3d32 -ladvapi32 -lwsock32
-lgdi32 -lwx_mswd_core-2.8 -lwx_based-2.8
Creating library file: c:/mgwx/build-shared/lib/libwx_mswd_adv-2.8.dll.a
(...)
I'm confused here. I don't know if make is trying to generate
wxmsw28d_adv_gcc_custom.dll or libwx_mswd_adv-2.8.dll.a. The latter
seems to be already existent pior to creating
wxmsw28d_adv_gcc_custom.dll, and since g++ is called with the -o
argument above, I figure it is that is being
wxmsw28d_adv_gcc_custom.dll.
Anyway, to report about the existence of the symbols, I did:
%nm --demangle coredll_combocmn.o | grep SetCust
0000489c T wxComboCtrlBase::SetCustomPaintWidth(int)
And then I manually repeat the g++ call above with coredll_combocmn.o
added to the list above of object files and then the file
wxmsw28d_adv_gcc_custom.dll is created. But I get some ``Info:'' lines
from the linker.
Info: resolving __ZN22wxPopupTransientWindow12ms_classInfoE by linking
to __imp___ZN22wxPopupTransientWindow12ms_classInfoE (auto-import)
Info: resolving _wxEVT_SET_FOCUS by linking to __imp__wxEVT_SET_FOCUS
(auto-import)
Info: resolving _wxEVT_MOTION by linking to __imp__wxEVT_MOTION
(auto-import)
Info: resolving _wxEVT_LEFT_DOWN by linking to __imp__wxEVT_LEFT_DOWN
(auto-import)
Info: resolving _wxEVT_RIGHT_DOWN by linking to __imp__wxEVT_RIGHT_DOWN
(auto-import)
Info: resolving _wxEVT_LEFT_UP by linking to __imp__wxEVT_LEFT_UP
(auto-import)
Info: resolving __ZN8wxWindow13sm_eventTableE by linking to
__imp___ZN8wxWindow13sm_eventTableE (auto-import)
Info: resolving _wxTextCtrlNameStr by linking to
__imp__wxTextCtrlNameStr (auto-import)
Info: resolving _wxDefaultPosition by linking to
__imp__wxDefaultPosition (auto-import)
Info: resolving _wxEVT_COMMAND_TEXT_UPDATED by linking to
__imp__wxEVT_COMMAND_TEXT_UPDATED (auto-import)
Info: resolving _wxEVT_LEFT_DCLICK by linking to
__imp__wxEVT_LEFT_DCLICK (auto-import)
I am the one skipping lines, for a better reading.
From this point, I believe that make will skip this dll, since it's
already done now. I re-execute make (without cleaning), and a new dll
has similar problems:
g++ -shared -o /c/mgwx/build-shared/lib/wxmsw28d_xrc_gcc_custom.dll
xrcdll_version_rc.o xrcdll_xh_animatctrl.o xrcdll_xh_bmp.o
xrcdll_xh_bmpcbox.o xrcdll_xh_bmpbt.o xrcdll_xh_bttn.o xrcdll_xh_cald.o
xrcdll_xh_chckb.o xrcdll_xh_chckl.o xrcdll_xh_choic.o
xrcdll_xh_choicbk.o xrcdll_xh_clrpicker.o xrcdll_xh_collpane.o
xrcdll_xh_combo.o xrcdll_xh_datectrl.o xrcdll_xh_dirpicker.o
xrcdll_xh_dlg.o xrcdll_xh_frame.o xrcdll_xh_mdi.o xrcdll_xh_filepicker.o
xrcdll_xh_fontpicker.o xrcdll_xh_gauge.o xrcdll_xh_gdctl.o
xrcdll_xh_grid.o xrcdll_xh_html.o xrcdll_xh_hyperlink.o
xrcdll_xh_listb.o xrcdll_xh_listbk.o xrcdll_xh_listc.o xrcdll_xh_menu.o
xrcdll_xh_notbk.o xrcdll_xh_odcombo.o xrcdll_xh_panel.o
xrcdll_xh_radbt.o xrcdll_xh_radbx.o xrcdll_xh_scrol.o xrcdll_xh_scwin.o
xrcdll_xh_htmllbox.o xrcdll_xh_sizer.o xrcdll_xh_slidr.o
xrcdll_xh_spin.o xrcdll_xh_split.o xrcdll_xh_statbar.o xrcdll_xh_stbmp.o
xrcdll_xh_stbox.o xrcdll_xh_stlin.o xrcdll_xh_sttxt.o xrcdll_xh_text.o
xrcdll_xh_tglbtn.o xrcdll_xh_toolb.o xrcdll_xh_tree.o xrcdll_xh_treebk.o
xrcdll_xh_unkwn.o xrcdll_xh_wizrd.o xrcdll_xmlres.o xrcdll_xmlrsall.o
-L/c/mgwx/build-shared/lib -L/c/mgwx/build-shared/lib
-L/c/mgwx/build-shared/lib -L/c/mgwx/build-shared/lib
-L/c/mgwx/build-shared/lib -mthreads -L/c/mgwx/build-shared/lib
-Wl,--out-implib=/c/mgwx/build-shared/lib/libwx_mswd_xrc-2.8.dll.a
-lrpcrt4 -loleaut32 -lole32 -luuid -lwinspool -lwinmm -lshell32
-lcomctl32 -lcomdlg32 -lctl3d32 -ladvapi32 -lwsock32 -lgdi32
-lwxtiffd-2.8 -lwxjpegd-2.8 -lwxpngd-2.8 -lwxzlibd-2.8 -lwxregexd-2.8
-lwxexpatd-2.8 -mthreads -lrpcrt4 -loleaut32 -lole32 -luuid -lwinspool
-lwinmm -lshell32 -lcomctl32 -lcomdlg32 -lctl3d32 -ladvapi32 -lwsock32
-lgdi32 -lwx_mswd_html-2.8 -lwx_mswd_adv-2.8 -lwx_mswd_core-2.8
-lwx_based_xml-2.8 -lwx_based-2.8
Creating library file: c:/mgwx/build-shared/lib/libwx_mswd_xrc-2.8.dll.a
xrcdll_xh_bmpcbox.o(.data$_ZTV16wxBitmapComboBox+0xa4): In function
`ZN26wxBitmapComboBoxXmlHandler14wxCreateObjectEv':
c:/mgwx/build-shared/../src/xrc/xh_bmpcbox.cpp:28: undefined reference
to `wxComboCtrlBase::Show(bool)'
xrcdll_xh_bmpcbox.o(.data$_ZTV16wxBitmapComboBox+0xa8):c:/mgwx/build-shared/../src/xrc/xh_bmpcbox.cpp:28:
undefined reference to `wxComboCtrlBase::Enable(bool)'
xrcdll_xh_bmpcbox.o(.data$_ZTV16wxBitmapComboBox+0xf8):c:/mgwx/build-shared/../src/xrc/xh_bmpcbox.cpp:28:
undefined reference to `wxComboCtrlBase::SetValidator(wxValidator
const&)'
xrcdll_xh_bmpcbox.o(.data$_ZTV16wxBitmapComboBox+0xfc):c:/mgwx/build-shared/../src/xrc/xh_bmpcbox.cpp:28:
undefined reference to `wxComboCtrlBase::GetValidator()'
I'm going to look for SetValidator.
%nm --demangle --print-file-name coredll_*.o | grep wxComboCtrlBase::SetValidator
coredll_combo.o: U wxComboCtrlBase::SetValidator(wxValidator const&)
coredll_combocmn.o:00001ee8 T wxComboCtrlBase::SetValidator(wxValidator const&)
coredll_combog.o: U wxComboCtrlBase::SetValidator(wxValidator const&)
So I'll add coredll_combocmn.o to the list again.
%pwd
/c/mgwx/build-shared
%ls lib/wxmsw28d_xrc_gcc_custom.dll
ls: lib/wxmsw28d_xrc_gcc_custom.dll: No such file or directory
%g++ -shared -o /c/mgwx/build-shared/lib/wxmsw28d_xrc_gcc_custom.dll
coredll_combocmn.o xrcdll_version_ rc.o xrcdll_xh_animatctrl.o
xrcdll_xh_bmp.o xrcdll_xh_bmpcbox.o xrcdll_xh_bmpbt.o xrcdll_xh_bttn.o
xrcd ll_xh_cald.o xrcdll_xh_chckb.o xrcdll_xh_chckl.o xrcdll_xh_choic.o
xrcdll_xh_choicbk.o xrcdll_xh_clrpic ker.o xrcdll_xh_collpane.o
xrcdll_xh_combo.o xrcdll_xh_datectrl.o xrcdll_xh_dirpicker.o
xrcdll_xh_dlg.o xrcdll_xh_frame.o xrcdll_xh_mdi.o xrcdll_xh_filepicker.o
xrcdll_xh_fontpicker.o xrcdll_xh_gauge.o xrcd ll_xh_gdctl.o
xrcdll_xh_grid.o xrcdll_xh_html.o xrcdll_xh_hyperlink.o
xrcdll_xh_listb.o xrcdll_xh_listb k.o xrcdll_xh_listc.o xrcdll_xh_menu.o
xrcdll_xh_notbk.o xrcdll_xh_odcombo.o xrcdll_xh_panel.o xrcdll_x
h_radbt.o xrcdll_xh_radbx.o xrcdll_xh_scrol.o xrcdll_xh_scwin.o
xrcdll_xh_htmllbox.o xrcdll_xh_sizer.o xrcdll_xh_slidr.o
xrcdll_xh_spin.o xrcdll_xh_split.o xrcdll_xh_statbar.o xrcdll_xh_stbmp.o
xrcdll_xh_st box.o xrcdll_xh_stlin.o xrcdll_xh_sttxt.o xrcdll_xh_text.o
xrcdll_xh_tglbtn.o xrcdll_xh_toolb.o xrcdll_ xh_tree.o
xrcdll_xh_treebk.o xrcdll_xh_unkwn.o xrcdll_xh_wizrd.o xrcdll_xmlres.o
xrcdll_xmlrsall.o -L/c /mgwx/build-shared/lib -L/c/mgwx/build-shared/lib
-L/c/mgwx/build-shared/lib -L/c/mgwx/build-shared/lib
-L/c/mgwx/build-shared/lib -mthreads -L/c/mgwx/build-shared/lib
-Wl,--out-implib=/c/mgwx/build-shared/ lib/libwx_mswd_xrc-2.8.dll.a
-lrpcrt4 -loleaut32 -lole32 -luuid -lwinspool -lwinmm -lshell32
-lcomctl32 -lcomdlg32 -lctl3d32 -ladvapi32 -lwsock32 -lgdi32
-lwxtiffd-2.8 -lwxjpegd-2.8 -lwxpngd-2.8 -lwxzlibd-2 .8 -lwxregexd-2.8
-lwxexpatd-2.8 -mthreads -lrpcrt4 -loleaut32 -lole32 -luuid -lwinspool
-lwinmm -lshel l32 -lcomctl32 -lcomdlg32 -lctl3d32 -ladvapi32 -lwsock32
-lgdi32 -lwx_mswd_html-2.8 -lwx_mswd_adv-2.8 - lwx_mswd_core-2.8
-lwx_based_xml-2.8 -lwx_based-2.8
Info: resolving __ZN22wxPopupTransientWindow12ms_classInfoE by linking
to __imp___ZN22wxPopupTransientWindow12ms_classInfoE (auto-import)
Info: resolving _wxEVT_SET_FOCUS by linking to __imp__wxEVT_SET_FOCUS
(auto-import)
Info: resolving _wxEVT_MOTION by linking to __imp__wxEVT_MOTION
(auto-import)
Info: resolving _wxEVT_LEFT_DOWN by linking to __imp__wxEVT_LEFT_DOWN
(auto-import)
Info: resolving _wxEVT_RIGHT_DOWN by linking to __imp__wxEVT_RIGHT_DOWN
(auto-import)
Info: resolving _wxEVT_LEFT_UP by linking to __imp__wxEVT_LEFT_UP
(auto-import)
Info: resolving __ZN8wxWindow13sm_eventTableE by linking to
__imp___ZN8wxWindow13sm_eventTableE (auto-import)
Info: resolving _wxTextCtrlNameStr by linking to
__imp__wxTextCtrlNameStr (auto-import)
Info: resolving _wxDefaultPosition by linking to
__imp__wxDefaultPosition (auto-import)
Info: resolving _wxEVT_COMMAND_TEXT_UPDATED by linking to
__imp__wxEVT_COMMAND_TEXT_UPDATED (auto-import)
Info: resolving _wxEVT_LEFT_DCLICK by linking to
__imp__wxEVT_LEFT_DCLICK (auto-import)
Info: resolving _wxEVT_LEAVE_WINDOW by linking to
__imp__wxEVT_LEAVE_WINDOW (auto-import)
Info: resolving _wxEVT_MOUSEWHEEL by linking to __imp__wxEVT_MOUSEWHEEL
(auto-import)
Info: resolving _wxDialogNameStr by linking to __imp__wxDialogNameStr
(auto-import)
Info: resolving _wxEVT_KEY_DOWN by linking to __imp__wxEVT_KEY_DOWN
(auto-import)
Info: resolving _wxEVT_KEY_UP by linking to __imp__wxEVT_KEY_UP
(auto-import)
Info: resolving _wxEVT_ACTIVATE by linking to __imp__wxEVT_ACTIVATE
(auto-import)
Info: resolving _wxEVT_SIZE by linking to __imp__wxEVT_SIZE
(auto-import)
Info: resolving _wxEVT_MIDDLE_DOWN by linking to
__imp__wxEVT_MIDDLE_DOWN (auto-import)
Info: resolving _wxEVT_MIDDLE_UP by linking to __imp__wxEVT_MIDDLE_UP
(auto-import)
Info: resolving _wxEVT_RIGHT_UP by linking to __imp__wxEVT_RIGHT_UP
(auto-import)
Info: resolving _wxEVT_MIDDLE_DCLICK by linking to
__imp__wxEVT_MIDDLE_DCLICK (auto-import)
Info: resolving _wxEVT_RIGHT_DCLICK by linking to
__imp__wxEVT_RIGHT_DCLICK (auto-import)
Info: resolving _wxEVT_ENTER_WINDOW by linking to
__imp__wxEVT_ENTER_WINDOW (auto-import)
Info: resolving _wxEVT_KILL_FOCUS by linking to __imp__wxEVT_KILL_FOCUS
(auto-import)
Info: resolving _wxEVT_COMMAND_TEXT_ENTER by linking to
__imp__wxEVT_COMMAND_TEXT_ENTER (auto-import)
Info: resolving _wxEVT_SYS_COLOUR_CHANGED by linking to
__imp__wxEVT_SYS_COLOUR_CHANGED (auto-import)
Info: resolving __ZN9wxControl12ms_classInfoE by linking to
__imp___ZN9wxControl12ms_classInfoE (auto-import)
Info: resolving __ZN10wxStockGDI11ms_instanceE by linking to
__imp___ZN10wxStockGDI11ms_instanceE (auto-import)
Info: resolving _g_isPainting by linking to __imp__g_isPainting
(auto-import)
Info: resolving _wxEVT_NAVIGATION_KEY by linking to
__imp__wxEVT_NAVIGATION_KEY (auto-import)
Info: resolving _wxNullBitmap by linking to __imp__wxNullBitmap
(auto-import)
Creating library file: c:/mgwx/build-shared/lib/libwx_mswd_xrc-2.8.dll.a
No more errors.
%pwd
/c/mgwx/build-shared
%ls -l lib/wxmsw28d_xrc_gcc_custom.dll
-rwxr-xr-x 1 Daniel Administ 8381008 Feb 9 19:13 lib/wxmsw28d_xrc_gcc_custom.dll
> As for the further errors, if I understand correctly you tried to link
> sample built with gcc with libraries built with msvc and this is just not
> going to work, gcc and msvc compilers are absolutely not compatible.
I had low hopes.
More information about the wx-users
mailing list