2

我最近开始在 Code::Blocks 10.05 上使用 wxSmith 在 GUI 上工作,当我运行项目时,我还没有编写任何代码,只是 OnClose 函数,当我构建并运行我的项目时,我得到 4错误、cannot find -lwxmsw28d_corecannot find -lwxbase28dcannot find -lwxpngdcannot find -lwxzlibd。构建日志是:

-------------- Build: Debug in gui-test ---------------

Compiling: gui_testMain.cpp
Linking executable: bin\Debug\gui-test.exe
c:/mingw/bin/../lib/gcc/x86_64-w64-mingw32/4.7.0/../../../../x86_64-w64-mingw32/bin/ld.exe: skipping incompatible C:\SourceCode\Libraries\wxWidgets2.8\lib\gcc_lib/libwxmsw28d_core.a when searching for -lwxmsw28d_core
c:/mingw/bin/../lib/gcc/x86_64-w64-mingw32/4.7.0/../../../../x86_64-w64-mingw32/bin/ld.exe: skipping incompatible C:\SourceCode\Libraries\wxWidgets2.8\lib\gcc_lib\libwxmsw28d_core.a when searching for -lwxmsw28d_core
c:/mingw/bin/../lib/gcc/x86_64-w64-mingw32/4.7.0/../../../../x86_64-w64-mingw32/bin/ld.exe: skipping incompatible C:\SourceCode\Libraries\wxWidgets2.8\lib\gcc_lib/libwxmsw28d_core.a when searching for -lwxmsw28d_core
c:/mingw/bin/../lib/gcc/x86_64-w64-mingw32/4.7.0/../../../../x86_64-w64-mingw32/bin/ld.exe: cannot find -lwxmsw28d_core
c:/mingw/bin/../lib/gcc/x86_64-w64-mingw32/4.7.0/../../../../x86_64-w64-mingw32/bin/ld.exe: skipping incompatible C:\SourceCode\Libraries\wxWidgets2.8\lib\gcc_lib/libwxbase28d.a when searching for -lwxbase28d
c:/mingw/bin/../lib/gcc/x86_64-w64-mingw32/4.7.0/../../../../x86_64-w64-mingw32/bin/ld.exe: skipping incompatible C:\SourceCode\Libraries\wxWidgets2.8\lib\gcc_lib\libwxbase28d.a when searching for -lwxbase28d
c:/mingw/bin/../lib/gcc/x86_64-w64-mingw32/4.7.0/../../../../x86_64-w64-mingw32/bin/ld.exe: skipping incompatible C:\SourceCode\Libraries\wxWidgets2.8\lib\gcc_lib/libwxbase28d.a when searching for -lwxbase28d
c:/mingw/bin/../lib/gcc/x86_64-w64-mingw32/4.7.0/../../../../x86_64-w64-mingw32/bin/ld.exe: cannot find -lwxbase28d
c:/mingw/bin/../lib/gcc/x86_64-w64-mingw32/4.7.0/../../../../x86_64-w64-mingw32/bin/ld.exe: skipping incompatible C:\SourceCode\Libraries\wxWidgets2.8\lib\gcc_lib/libwxpngd.a when searching for -lwxpngd
c:/mingw/bin/../lib/gcc/x86_64-w64-mingw32/4.7.0/../../../../x86_64-w64-mingw32/bin/ld.exe: skipping incompatible C:\SourceCode\Libraries\wxWidgets2.8\lib\gcc_lib\libwxpngd.a when searching for -lwxpngd
c:/mingw/bin/../lib/gcc/x86_64-w64-mingw32/4.7.0/../../../../x86_64-w64-mingw32/bin/ld.exe: skipping incompatible C:\SourceCode\Libraries\wxWidgets2.8\lib\gcc_lib/libwxpngd.a when searching for -lwxpngd
c:/mingw/bin/../lib/gcc/x86_64-w64-mingw32/4.7.0/../../../../x86_64-w64-mingw32/bin/ld.exe: cannot find -lwxpngd
c:/mingw/bin/../lib/gcc/x86_64-w64-mingw32/4.7.0/../../../../x86_64-w64-mingw32/bin/ld.exe: skipping incompatible C:\SourceCode\Libraries\wxWidgets2.8\lib\gcc_lib/libwxzlibd.a when searching for -lwxzlibd
c:/mingw/bin/../lib/gcc/x86_64-w64-mingw32/4.7.0/../../../../x86_64-w64-mingw32/bin/ld.exe: skipping incompatible C:\SourceCode\Libraries\wxWidgets2.8\lib\gcc_lib\libwxzlibd.a when searching for -lwxzlibd
c:/mingw/bin/../lib/gcc/x86_64-w64-mingw32/4.7.0/../../../../x86_64-w64-mingw32/bin/ld.exe: skipping incompatible C:\SourceCode\Libraries\wxWidgets2.8\lib\gcc_lib/libwxzlibd.a when searching for -lwxzlibd
c:/mingw/bin/../lib/gcc/x86_64-w64-mingw32/4.7.0/../../../../x86_64-w64-mingw32/bin/ld.exe: cannot find -lwxzlibd
collect2.exe: error: ld returned 1 exit status
Process terminated with status 1 (0 minutes, 1 seconds)
4 errors, 0 warnings

什么可能给我错误?我在 Windows 上使用 Code::Blocks。我正在做这个链接在做什么的教程wxSmith Tutorial - Code::Blocks Wiki

注意:如果有帮助,我从 wxPack 安装了 wxWidgets,在 Code::Blocks 中,我使用全局变量编辑器创建了一个全局变量,其中基本字段有C:\SourceCode\Libraries\wxWidgets2.8,包含字段有C:\SourceCode\Libraries\wxWidgets2.8\include,lib 字段有C:\SourceCode\Libraries\wxWidgets2.8\lib。其余字段为空,如 obj(我找不到 obj 文件夹)、cflags、lflags 和用户定义字段为空。

4

3 回答 3

1

看起来好像您没有编译正确的调试版本的 wxWidgets。

查看您的 ...\wxWidgets\build\msw 文件夹,是否有类似的文件夹

  • gc_mwsud (unicode 调试)
  • gc_mswuddll(unicode 调试共享)

在你的情况下是一个文件夹

  • gcc_mswd(调试)
  • gcc_mswddll(调试共享)

编辑

仅适用于您的特殊情况

转到 x:\wxWidgets\build\msw\ ( x == 你的驱动器)

改变你的 x:\wxWidgets\build\msw\config.gcc 喜欢

....

# C compiler 
CC = gcc

# C++ compiler 
CXX = g++
....

# What type of library to build? [0,1]
SHARED = 0
....

# Compile Unicode build of wxWidgets? [0,1]
UNICODE = 0
....

# Type of compiled binaries [debug,release]
BUILD ?= debug
....

# Multiple libraries or single huge monolithic one? [0,1]
MONOLITHIC = 0

用命令制作。仅适用于您的特殊情况!

x:\wxWidgets\build\msw>mingw32-make -f makefile.gcc

官方支持的 Code::Blocks 的正常方式是

清理源码:

mingw32-make -f makefile.gcc MONOLITHIC=1 SHARED=1 UNICODE=1 BUILD=debug clean

注意:确保在此步骤和下面的构建步骤中使用完全相同的选项。clean 目标使用这些变量并且只清理生成的对象和库文件的指定版本。(如果这些变量不相同,它将不会清理预期的文件。)

注意:如果清理后编译仍然有问题,可以尝试手动删除 build\msw 目录下的 gcc_mswd 目录。该目录是存储目标文件的地方。

当一切都清理干净后,您可以开始编译 wxWidgets:

mingw32-make -f makefile.gcc MONOLITHIC=1 SHARED=1 UNICODE=1 BUILD=debug

注意:这些选项是官方支持的 Code::Blocks 选项。如果您想要另一个版本的 wxWidgets(调试或非 Unicode),您仍然必须确保构建一个 MONOLITHIC 版本(一个大 DLL)来链接 Code::Blocks。

耐心。这一步需要时间。在继续之前确保没有编译错误。

http://wiki.codeblocks.org/index.php?title=Compiling_wxWidgets_2.8.6_to_develop_Code::Blocks_%28MSW%29

于 2012-08-21T13:10:21.770 回答
0

“不兼容”几乎可以肯定意味着该库是一个 32 位文件并且您使用的是 64 位编译器。在从 MinGW 命令行构建期间生成的库和目标文件之一上运行file以确认这一点。

如果这是正确的,解决方案是-m32在编译器/链接器命令行默认生成 64 位代码时添加选项。或者也许只是获得一个 32 位版本的编译器。

于 2012-08-20T11:28:58.617 回答
0

在创建新项目时,只需检查 wxwidget 构建为使用 wxwidget DLL 选项的单片库的选项。!如果已经创建项目,只需添加项目的链接器设置和编译器设置(属性)

于 2013-02-25T08:25:44.190 回答