C ++如何使用MinGW编译WxWidget程序?

时间:2016-04-23 21:05:21

标签: c++ mingw wxwidgets

我正在使用MinGW g ++并安装了-mingw32-make wxWidgets库文件。但是,当我尝试编译一个简单的程序时:

// test.cpp
#include "wx/wx.h"

int main( int , char** )
{
     return 0;
};

链接失败。

我使用此命令行

g++ test.cpp - o test.exe

看来我需要额外的链接器参数。我究竟需要什么?

另外,我正在搜索一下,我发现有人说我应该在wxWidgets文件夹中的示例程序上使用-mingw32-make -n,并对我自己的文件使用相同的参数,但这也失败了

这是我收到的错误消息:

g++ test.cpp -o test.exe -g -mthreads -L.....\lib\gcc_lib -Wl,-- subsystem,windows -mwindows -lwxmsw31ud_core -lwxbase31ud -lwxtiffd -lwxjpegd -lwxpngd -lwxzlibd -lwxregexud -lwxexpatd -lkernel32 -luser32 -lgdi32 -lcomdlg32 -lwinspool -lwinmm -lshell32 -lshlwapi -lcomctl32 -lole32 -loleaut32 -luuid -lrpcrt4 -ladvapi32 -lversion -lwsock32 -lwininet d:/programming/software/mingw/bin/../lib/gcc/mingw32/4.9.3/../../../../mingw32/bin/ld.exe: cannot find -lwxmsw31ud_core d:/programming/software/mingw/bin/../lib/gcc/mingw32/4.9.3/../../../../mingw32/bin/ld.exe: cannot find -lwxbase31ud d:/programming/software/mingw/bin/../lib/gcc/mingw32/4.9.3/../../../../mingw32/bin/ld.exe: cannot find -lwxtiffd d:/programming/software/mingw/bin/../lib/gcc/mingw32/4.9.3/../../../../mingw32/bin/ld.exe: cannot find -lwxjpegd d:/programming/software/mingw/bin/../lib/gcc/mingw32/4.9.3/../../../../mingw32/bin/ld.exe: cannot find -lwxpngd d:/programming/software/mingw/bin/../lib/gcc/mingw32/4.9.3/../../../../mingw32/bin/ld.exe: cannot find -lwxzlibd d:/programming/software/mingw/bin/../lib/gcc/mingw32/4.9.3/../../../../mingw32/bin/ld.exe: cannot find -lwxregexud d:/programming/software/mingw/bin/../lib/gcc/mingw32/4.9.3/../../../../mingw32/bin/ld.exe: cannot find -lwxexpatd collect2.exe: error: ld returned 1 exit status

3 个答案:

答案 0 :(得分:0)

如何包含lib目录以及如何指定用于链接的库名?

 g++ test.cpp -L/path/to/library/directory -lwxpngd -o test.exe

是什么? -lwxpngd -l = lib 不带前缀wxpngd的lib的lib名称 -lwxpngd = -libwxpngd

-L/path/to/library/directory是libwxpngd所在的路径。

答案 1 :(得分:0)

为了获得更好的体验,建议使用像cmake这样的构建工具或类似代码块的IDE。由于您使用的是mingw(我假设它在Win32系统中),您需要创建指向两个包含文件的makefile:一个用于lib或dll配置文件(在编译wxWidgets时创建),包含wxWidgets框架的目录和库要使用的。我建议你阅读这篇论文page,这会使这件事变得很糟糕。

答案 2 :(得分:0)

我制作了一个关于此主题的视频https://www.youtube.com/watch?v=f6FDNR3lh8E 以下是要遵循的小而简单的步骤。

先决条件:

  • 下载并安装了 GNU g++ 编译器。

  • 将 gcc/g++ 路径设置为环境变量。

  • 下载 WxWidgets 二进制文件:1. 头文件,2. 开发文件,3. DLL。

  • 然后按原样提取一个文件夹。我已将它们解压缩到 D:\WxAPI 文件夹中。 看起来像 : D:
    - WxAPI 文件夹 - 包含(头文件将此文件夹压缩为 .7z) - lib(开发文件和 DLL 将此文件夹压缩在 .7z 中,并且两个提取物都在此保存文件夹中)

  • 设置您的项目开发结构。

    我的项目开发结构:

     WxExample (Project Folder)
         - Build (Folder) : Contains debug and release dlls and exe
             - debug (Folder) : Contains debug specific dlls and exe.
             - release (Folder) : Contains release specific dlls and exe.
         - inlcude (Folder) : Contains project header files.
         - src (Folder) : Contains project .cpp files.
         - wxCompiler.cmd : Contains compile command created with following steps.
    
  • 写入编译命令

    • 链接以下进行编译。
    1. 首先编译项目 *.cpp 文件: g++ ".\src*.cpp"

    2. 给出项目输出 .exe 名称: -o ".\build\release\Project_Name.exe"

    3. 向 g++ 显示项目 .h 文件位置: -I ".\include"

    4. 提供 WxWidget .h 文件: -I "D:\WxAPI\include"

    5. 找到 WxWidget setup.h 文件: -I "D:\WxAPI\lib\gcc810_x64_dll\mswu"

    6. 提供 WxWidgets 的二进制文件位置: -L "D:\WxAPI\lib\gcc810_x64_dll"

    7. 提供编译标志: -l wxbase31u -l wxmsw31u_core

    • 这里 D:\WxAPI\lib\gcc810_x64_dll\libwxbase31u.a 文件重命名为“wxbase31u” & D:\WxAPI\lib\gcc810_x64_dll\libwxmsw31u_core.a 文件重命名为“wxmsw31u_core”作为标志。

    • 您必须添加与您在项目中使用的类似的文件标志作为 .h

    • 例如: -lwxmsw31u_core -lwxbase31u -lwxtiff -lwxjpeg -lwxpng -lwxzlib -lwxregexu -lwxexpat -lkernel32 -luser32 -lgdi32 -lcomdlg32 -lwinspool -lwinmm -lshell32 -lsautlhlwlapi -lshell32 -lsautlhlwlpi -loleacc -luxtheme

    • 这是完整的命令: g++ ".\src*.cpp" -o ".\build\release" -I "D:\WxExample\include" -I "D:\WxAPI\include" -I "D:\WxAPI\lib\gcc810_x64_dll\ mswu" -L "D:\WxAPI\lib\gcc810_x64_dll" -l wxbase31u -l wxmsw31u_core

  • 运行 wxWidgets.cmd,就是这样。您的 exe 在您的 .\Build\release 文件夹中。

    1. 在环境变量中设置 WxWidget DLL 路径。 如果您不想将所需的 dll 复制粘贴到您的发布/调试文件夹。