2010-03-14 59 views
3

我用這個命令在Linux上構建的wxWidgets:不匹配檢測

../configure --enable-共享 - 禁用調試

它看到此版本的結果:

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

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

wx-con圖輸出:

 
[email protected]:~$ 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 
[email protected]:~$ 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__ 
[email protected]:~$ 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 

現在我試圖用發行版本建立你好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 

有什麼不對?

回答

2

您可能需要檢查您的頭文件是否都沒有聲明DEBUG宏這種或那種方式。我遇到過這個問題一次。

除此之外,它可能更好地執行靜態鏈接。

+0

不,DEBUG未定義。這是簡單的來自Widgets教程的Hello示例,一個小cpp文件。其他一切都來自Widgets標題。 – 2010-03-14 15:59:03

+1

謝謝,使用靜態wxWidgets版本正在工作。現在對我來說沒問題。 – 2010-03-15 07:39:49

+0

我強烈建議將wxWidgets構建爲一個整體庫,如果你包含所有單獨的庫。從長遠來看,這將消除許多令人頭痛的問題。 – 2010-03-15 23:23:59