繁体   English   中英

C ++ wxWidgets Code :: Blocks自定义项目“正常”编译和启用C ++ 11期间的交叉编译链接错误

[英]C++ wxWidgets Code::Blocks cross-compiling linking errors during custom project “normal” compilation and C++11 enabled

我使用Lubuntu 14.04 LTS AMD64。
通过这种方式,我在该教程的帮助下编译了wxWidgets 3.0.1(我更改了全局编译器设置,而不是目标设置-我的Win名称目标是Windows):

/home/tomasz/Pobrane/src/wxWidgets-3.0.1/configure prefix=/usr/local/i386-mingw32 --host=i386-mingw32 --build=x86_64-linux --enable-unicode --disable-shared --disable-debug --with-msw --enable-stl

然后我用了make -j3并安装了make。 一切还好。 但是,链接存在问题:

obj/Windows/main.o:main.cpp:(.text+0x23): undefined reference to `wxEntry(HINSTANCE__*, HINSTANCE__*, char*, int)'
obj/Windows/main.o:main.cpp:(.text+0x81): undefined reference to wxAppConsoleBase::CheckBuildOptions(char const*, char const*)'

我认为问题与wx / app.h有关,因为当我禁用它时,没有像这样的错误。

整个日志:

-------------- Build: Windows in Symulator Kostek (compiler: MingW32 Compiler)---------------

i386-mingw32-g++  -I/usr/local/i386-mingw32/include/ -c "/home/tomasz/Dropbox/Programy/Linux/wxWidgets/Symulator Kostek/panels.cpp" -o obj/Windows/panels.o
i386-mingw32-g++ -L/usr/local/i386-mingw32/lib/ -o "bin/Windows/Symulator Kostek.exe" obj/Windows/main.o obj/Windows/main_frame.o obj/Windows/panels.o    
In file included from /usr/local/i386-mingw32/include/wx/msw/gccpriv.h:61:0,
                 from /usr/local/i386-mingw32/include/wx/platform.h:456,
                 from /usr/local/i386-mingw32/include/wx/defs.h:27,
                 from /usr/local/i386-mingw32/include/wx/event.h:14,
                 from /usr/local/i386-mingw32/include/wx/window.h:18,
                 from /usr/local/i386-mingw32/include/wx/panel.h:19,
                 from /home/tomasz/Dropbox/Programy/Linux/wxWidgets/Symulator Kostek/panels.h:4,
                 from /home/tomasz/Dropbox/Programy/Linux/wxWidgets/Symulator Kostek/panels.cpp:1:
/usr/local/i386-mingw32/include/w32api.h:27:2: warning: #warning WARNING - The w32api.h header file is deprecated and will be removed. [-Wcpp]
 #warning WARNING - The w32api.h header file is deprecated and will be removed.
  ^
obj/Windows/main.o:main.cpp:(.text+0x23): undefined reference to `wxEntry(HINSTANCE__*, HINSTANCE__*, char*, int)'
obj/Windows/main.o:main.cpp:(.text+0x81): undefined reference to `wxAppConsoleBase::CheckBuildOptions(char const*, char const*)'
/usr/local/lib/gcc/i386-mingw32/4.9.1/../../../../i386-mingw32/bin/ld: obj/Windows/main.o: zły adres przemieszczenia 0xf w sekcji `.text$_ZN8wxString7ImplStrEPKw[__ZN8wxString7ImplStrEPKw]'
/usr/local/lib/gcc/i386-mingw32/4.9.1/../../../../i386-mingw32/bin/ld: final link failed: Nieprawidłowa operacja
collect2: error: ld returned 1 exit status
Process terminated with status 1 (0 minute(s), 4 second(s))
2 error(s), 1 warning(s) (0 minute(s), 4 second(s))

当我尝试使用C ++ 11时(由于存储库中的旧编译器而手动编译MinGW的原因):

/usr/local/i386-mingw32/include/io.h:301:14: error: ‘off64_t’ does not name a type
/usr/local/i386-mingw32/include/io.h:302:14: error: ‘off64_t’ does not name a type  
/usr/local/i386-mingw32/include/wx/wxcrtbase.h:680:68: error: ‘wcsdup’ was not declared in this scope  

和整个日志:

-------------- Build: Windows in Symulator Kostek (compiler: MingW32 Compiler)---------------

    i386-mingw32-g++ -std=c++11 -I/usr/local/i386-mingw32/include/ -c "/home/tomasz/Dropbox/Programy/Linux/wxWidgets/Symulator Kostek/panels.cpp" -o obj/Windows/panels.o
    i386-mingw32-g++ -L/usr/local/i386-mingw32/lib/ -o "bin/Windows/Symulator Kostek.exe" obj/Windows/main.o obj/Windows/main_frame.o obj/Windows/panels.o    
    In file included from /usr/local/i386-mingw32/include/wx/msw/gccpriv.h:61:0,
                     from /usr/local/i386-mingw32/include/wx/platform.h:456,
                     from /usr/local/i386-mingw32/include/wx/defs.h:27,
                     from /usr/local/i386-mingw32/include/wx/event.h:14,
                     from /usr/local/i386-mingw32/include/wx/window.h:18,
                     from /usr/local/i386-mingw32/include/wx/panel.h:19,
                     from /home/tomasz/Dropbox/Programy/Linux/wxWidgets/Symulator Kostek/panels.h:4,
                     from /home/tomasz/Dropbox/Programy/Linux/wxWidgets/Symulator Kostek/panels.cpp:1:
    /usr/local/i386-mingw32/include/w32api.h:27:2: warning: #warning WARNING - The w32api.h header file is deprecated and will be removed. [-Wcpp]
     #warning WARNING - The w32api.h header file is deprecated and will be removed.
      ^
    In file included from /usr/local/i386-mingw32/include/wx/wxcrtbase.h:41:0,
                     from /usr/local/i386-mingw32/include/wx/string.h:45,
                     from /usr/local/i386-mingw32/include/wx/memory.h:15,
                     from /usr/local/i386-mingw32/include/wx/object.h:19,
                     from /usr/local/i386-mingw32/include/wx/event.h:16,
                     from /usr/local/i386-mingw32/include/wx/window.h:18,
                     from /usr/local/i386-mingw32/include/wx/panel.h:19,
                     from /home/tomasz/Dropbox/Programy/Linux/wxWidgets/Symulator Kostek/panels.h:4,
                     from /home/tomasz/Dropbox/Programy/Linux/wxWidgets/Symulator Kostek/panels.cpp:1:
    /usr/local/i386-mingw32/include/io.h:301:14: error: ‘off64_t’ does not name a type
     __CRT_INLINE off64_t lseek64 (int, off64_t, int);
                  ^
    /usr/local/i386-mingw32/include/io.h:302:14: error: ‘off64_t’ does not name a type
     __CRT_INLINE off64_t lseek64 (int fd, off64_t offset, int whence) {
                  ^
    In file included from /usr/local/i386-mingw32/include/wx/string.h:45:0,
                     from /usr/local/i386-mingw32/include/wx/memory.h:15,
                     from /usr/local/i386-mingw32/include/wx/object.h:19,
                     from /usr/local/i386-mingw32/include/wx/event.h:16,
                     from /usr/local/i386-mingw32/include/wx/window.h:18,
                     from /usr/local/i386-mingw32/include/wx/panel.h:19,
                     from /home/tomasz/Dropbox/Programy/Linux/wxWidgets/Symulator Kostek/panels.h:4,
                     from /home/tomasz/Dropbox/Programy/Linux/wxWidgets/Symulator Kostek/panels.cpp:1:
    /usr/local/i386-mingw32/include/wx/wxcrtbase.h: In function ‘wchar_t* wxStrdup(const wchar_t*)’:
    /usr/local/i386-mingw32/include/wx/wxcrtbase.h:680:68: error: ‘wcsdup’ was not declared in this scope
     inline wchar_t* wxStrdup(const wchar_t *s) { return wxCRT_StrdupW(s); }
                                                                        ^
    Process terminated with status 1 (0 minute(s), 5 second(s))
    3 error(s), 1 warning(s) (0 minute(s), 5 second(s))

这里有两个完全独立的问题:

  1. 链接错误只是由于根本没有与wxWidgets库链接而导致的-您的命令行在任何地方都没有提及它们。 在makefile中使用wx-config --libs的输出。

  2. C ++ 11编译问题是由于编译不支持C ++ 11的wxWidgets而引起的。 使用g ++时,如果不在库中使用C ++ 11,则无法在应用程序中使用C ++ 11,反之亦然,因为C ++ 98和C ++ 11 兼容ABI。 使用CXXFLAGS=-std=c++11重建该库以修复此问题。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM