程序和库构建版本不匹配

3
我使用以下命令在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_net-2.8 -lwx_base-2.8
现在我正在尝试使用发布版本构建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的计算机上执行此程序。我将程序和所有共享库复制到另一台计算机上:

你好 libwx_gtk2_core-2.8.so libwx_base-2.8.so libwx_base-2.8.so.0 libwx_base-2.8.so.0.6.0 libwx_gtk2_html-2.8.so libwx_gtk2_html-2.8.so.0 libwx_gtk2_html-2.8.so.0.6.0 libwx_gtk2_qa-2.8.so libwx_gtk2_qa-2.8.so.0 libwx_gtk2_qa-2.8.so.0.6.0 libwx_gtk2_richtext-2.8.so libwx_gtk2_richtext-2.8.so.0 libwx_gtk2_richtext-2.8.so.0.6.0 libwx_gtk2_xrc-2.8.so libwx_gtk2_xrc-2.8.so.0 libwx_gtk2_xrc-2.8.so.0.6.0
并运行它: LD_LIBRARY_PATH=. ./hello
结果:
致命错误:检测到程序和库构建版本不匹配。 该库使用了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=. ./hello
出了什么问题?
1个回答

2

你可能需要检查一下你的头文件是否以某种方式声明了DEBUG宏。我曾经遇到过这个问题。

除此之外,最好进行静态链接。


不,DEBUG未定义。这是Widgets教程中的简单Hello示例,只有一个小的cpp文件。其他所有内容都来自Widgets头文件。 - Alex F
1
谢谢,使用静态 wxWidgets 版本可以工作。现在对我来说没问题了。 - Alex F
我强烈建议,如果您要包含所有单独的库,那么将wxWidgets构建为一个单体库。这将在长期运行中消除许多麻烦。 - Nathan Osman
1
我如何使用“静态wxWidgets”?我需要编译它吗? - Yan King Yin

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接