【问题标题】:Mismatch between the program and library build versions detected检测到程序和库构建版本之间的不匹配
【发布时间】:2011-01-27 08:53:24
【问题描述】:

我使用这个命令在 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 默认配置是 gtk2-ansi-release-2.8 默认配置将用于输出 备用比赛: 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_xml-2.8-base

现在我正在尝试使用 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_2-xml-2.8 -lwx_base_2-8-2.8

它在我的电脑上编译并成功运行。程序依赖:

你好 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 的计算机上执行这个程序。我将程序和所有共享库复制到另一台计算机:

你好 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=。 ./你好

结果:

致命错误:检测到程序和库构建版本不匹配。 该库使用 2.8(调试、ANSI、使用 C++ ABI 1002 的编译器、wx 容器,与 2.6 兼容), 并且您的程序使用了 2.8(无调试,ANSI,带有 C++ ABI 1002 的编译器,wx 容器,与 2.6 兼容)。 ./run.sh:第 1 行:1810 中止 LD_LIBRARY_PATH=。 。/你好

怎么了?

【问题讨论】:

    标签: linux build linker wxwidgets


    【解决方案1】:

    您可能需要检查是否没有任何标头以这种或那种方式声明 DEBUG 宏。我曾经遇到过这个问题。

    除此之外,执行静态链接可能会更好。

    【讨论】:

    • 不,未定义 DEBUG。这是来自 Widgets 教程的简单 Hello 示例,一个小的 cpp 文件。其他一切都来自小部件标题。
    • 谢谢,使用静态 wxWidgets 版本是有效的。我现在没事了。
    • 如果您包含所有单独的库,我强烈建议将 wxWidgets 构建为一个整体库。从长远来看,它将消除很多令人头疼的问题。
    • 如何使用“静态 wxWidgets”?需要编译吗?
    猜你喜欢
    • 2016-05-20
    • 1970-01-01
    • 2021-11-01
    • 2021-06-07
    • 1970-01-01
    • 2017-04-28
    • 1970-01-01
    • 2021-06-22
    • 2011-07-20
    相关资源
    最近更新 更多