views:

313

answers:

1

I built wxWidgets on Linux using this command:

../configure --enable-shared --disable-debug

It see results of this build:

/usr/local/lib/wx/config/gtk2-ansi-release-2.8

/usr/local/lib/wx/include/gtk2-ansi-release-2.8/wx/setup.h

wx-config output:

alex@alex-linux:~$ wx-config --list
    Default config is gtk2-ansi-release-2.8
  Default config will be used for output
  Alternate matches:
    gtk2-ansi-debug-2.8
    gtk2-ansi-debug-static-2.8
    gtk2-ansi-release-static-2.8
alex@alex-linux:~$ wx-config --cppflags --release
2.8
-I/usr/local/lib/wx/include/gtk2-ansi-release-2.8 -I/usr/local/include/wx-2.8 -D_FILE_OFFSET_BITS=64 -D_LARGE_FILES -D__WXGTK__
alex@alex-linux:~$ wx-config --libs --release
2.8
-L/usr/local/lib -pthread   -lwx_gtk2_richtext-2.8 -lwx_gtk2_aui-2.8 -lwx_gtk2_xrc-2.8 -lwx_gtk2_qa-2.8 -lwx_gtk2_html-2.8 -lwx_gtk2_adv-2.8 -lwx_gtk2_core-2.8 -lwx_base_xml-2.8 -lwx_base_net-2.8 -lwx_base-2.8 

Now I am trying to build Hello wxWidgets program with Release version:

g++ -I/usr/local/lib/wx/include/gtk2-ansi-release-2.8 -I/usr/local/include/wx-2.8 -D_FILE_OFFSET_BITS=64 -D_LARGE_FILES -D__WXGTK__ hello.cpp -o hello -L/usr/local/lib -pthread   -lwx_gtk2_richtext-2.8 -lwx_gtk2_aui-2.8 -lwx_gtk2_xrc-2.8 -lwx_gtk2_qa-2.8 -lwx_gtk2_html-2.8 -lwx_gtk2_adv-2.8 -lwx_gtk2_core-2.8 -lwx_base_xml-2.8 -lwx_base_net-2.8 -lwx_base-2.8

It compiles and runs successfully on my computer. Program dependencies:

ldd hello
 linux-gate.so.1 =>  (0x006ef000)
 libwx_gtk2_richtext-2.8.so.0 => /usr/local/lib/libwx_gtk2_richtext-2.8.so.0 (0x00253000)
 libwx_gtk2_aui-2.8.so.0 => /usr/local/lib/libwx_gtk2_aui-2.8.so.0 (0x005ff000)
 libwx_gtk2_xrc-2.8.so.0 => /usr/local/lib/libwx_gtk2_xrc-2.8.so.0 (0x00110000)
 libwx_gtk2_qa-2.8.so.0 => /usr/local/lib/libwx_gtk2_qa-2.8.so.0 (0x00a3c000)
 libwx_gtk2_html-2.8.so.0 => /usr/local/lib/libwx_gtk2_html-2.8.so.0 (0x0019d000)
 libwx_gtk2_adv-2.8.so.0 => /usr/local/lib/libwx_gtk2_adv-2.8.so.0 (0x00c18000)
 libwx_gtk2_core-2.8.so.0 => /usr/local/lib/libwx_gtk2_core-2.8.so.0 (0x00ef8000)
 libwx_base_xml-2.8.so.0 => /usr/local/lib/libwx_base_xml-2.8.so.0 (0x0047e000)
 libwx_base_net-2.8.so.0 => /usr/local/lib/libwx_base_net-2.8.so.0 (0x00353000)
 libwx_base-2.8.so.0 => /usr/local/lib/libwx_base-2.8.so.0 (0x006f0000)
    ...

Now I want to execute this program on another computer without wxWidgets installed. I copy the program and all shared libraries to another computer:

hello                        libwx_gtk2_core-2.8.so
libwx_base-2.8.so            libwx_gtk2_core-2.8.so.0
libwx_base-2.8.so.0          libwx_gtk2_core-2.8.so.0.6.0
libwx_base-2.8.so.0.6.0      libwx_gtk2_html-2.8.so
libwx_base_net-2.8.so        libwx_gtk2_html-2.8.so.0
libwx_base_net-2.8.so.0      libwx_gtk2_html-2.8.so.0.6.0
libwx_base_net-2.8.so.0.6.0  libwx_gtk2_qa-2.8.so
libwx_base_xml-2.8.so        libwx_gtk2_qa-2.8.so.0
libwx_base_xml-2.8.so.0      libwx_gtk2_qa-2.8.so.0.6.0
libwx_base_xml-2.8.so.0.6.0  libwx_gtk2_richtext-2.8.so
libwx_gtk2_adv-2.8.so        libwx_gtk2_richtext-2.8.so.0
libwx_gtk2_adv-2.8.so.0      libwx_gtk2_richtext-2.8.so.0.6.0
libwx_gtk2_adv-2.8.so.0.6.0  libwx_gtk2_xrc-2.8.so
libwx_gtk2_aui-2.8.so        libwx_gtk2_xrc-2.8.so.0
libwx_gtk2_aui-2.8.so.0      libwx_gtk2_xrc-2.8.so.0.6.0
libwx_gtk2_aui-2.8.so.0.6.0

And run it: LD_LIBRARY_PATH=. ./hello

Result:

Fatal Error: Mismatch between the program and library build versions detected.
The library used 2.8 (debug,ANSI,compiler with C++ ABI 1002,wx containers,compatible with 2.6),
and your program used 2.8 (no debug,ANSI,compiler with C++ ABI 1002,wx containers,compatible with 2.6).
./run.sh: line 1:  1810 Aborted                 LD_LIBRARY_PATH=. ./hello

What is wrong?

+1  A: 

You may need to check if none of your headers declares DEBUG macro this or that way. I ran into this problem once.

Apart from that, it may be better to perform static linking instead.

Roman D
No, DEBUG is not defined. This is simple Hello sample from Widgets tutorial, one small cpp file. Everything else is from the Widgets headers.
Alex Farber
Thank you, using static wxWidgets version is working. It's OK for me now.
Alex Farber
I strongly suggest building wxWidgets as a monolithic library if you're including all of the individual libraries. It will eliminate a lot of headaches in the long run.
George Edison