【问题标题】:wxSmith and Code::Blocks build errorwxSmith 和 Code::Blocks 构建错误
【发布时间】:2012-08-20 10:20:08
【问题描述】:

我最近开始在 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,用户自定义字段为空。

【问题讨论】:

  • 您是在 64 位计算机上但安装了 32 位版本,还是相反?
  • 我在 64 位 Windows 上,在 wxPack 中没有 32 位或 64 位版本,只有 1 个文件 wxpack.sourceforge.net/Main/Downloads

标签: c++ windows user-interface wxwidgets codeblocks


【解决方案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

【讨论】:

  • 不,我仅有的文件夹是:“vc_mswddll”、“vc_mswdll”、“vc_mswuddll”和“vc_mswudll”
  • 您必须为 gcc_lib 编译并进行调试。看看我的编辑
【解决方案2】:

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

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

【讨论】:

  • 如何运行file,MinGW命令行与命令提示符有什么不同?
  • 我认为你应该有一个通过 MinGW/MSYS 安装安装的 bash 的快捷方式。并且文件应该可用,即只是“文件的文件名”。
  • 好的,我可以打开 MinGW 命令行,但是both library and one of the object files generated during you build 是什么意思?我对整个 bash 命令和 MinGW 有点陌生。
【解决方案3】:

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

【讨论】:

    猜你喜欢
    • 2012-12-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-02-20
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多