检测到的程序和库构建版本之间不匹配

时间:2010-03-14 11:22:43

标签: linux build linker wxwidgets

我使用以下命令在Linux上构建了wxWidgets:

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

它看到了这个版本的结果:

/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输出:

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 

现在我正在尝试使用Release版本构建Hello wxWidgets程序:

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

它在我的计算机上成功编译并运行。程序依赖:

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)
    ...

现在我想在没有安装wxWidgets的另一台计算机上执行此程序。我将程序和所有共享库复制到另一台计算机:

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

运行它: LD_LIBRARY_PATH =。 ./hello

结果:

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

有什么问题?

1 个答案:

答案 0 :(得分:2)

您可能需要检查是否所有标头都不是以这种方式声明DEBUG宏。我遇到过这个问题一次。

除此之外,最好还是执行静态链接。