【问题标题】:How to cross compile with mingw on linux using Code::Blocks?如何使用 Code::Blocks 在 Linux 上与 mingw 交叉编译?
【发布时间】:2013-03-16 17:28:47
【问题描述】:

所以我在 linux 上使用 i586-mingw32msvc 编译器为 windows 编译。 Code::Blocks 的配置类似于this 站点。一切都很好,直到我尝试编译 C++11 代码并且编译器说:cc1plus: error: unrecognized command line option "-std=c++0x",然后我才意识到 mingw32 编译器对于 C++11 代码来说太旧了。

所以我安装了mingw-w64,并在菜单Settings->Compiler->Toolchain 的Code::Blocks 中将i586-mingw32msvc 更改为i686-w64-mingw32。搜索目录也已更改。

现在,当我尝试编译 C++11 代码时,我得到了这个(构建日志):

i686-w64-mingw32-g++ -Wall -fexceptions  -std=c++0x  -DWINVER=0x0400 -D__WIN95__ -D__GNUWIN32__ -DSTRICT -DHAVE_W32API_H -D__WXMSW__ -D__WINDOWS__   -I/usr/i686-w64-mingw32/include  -c /home/me/program/p1/main.cpp -o obj/Release/win/main.o
i686-w64-mingw32-g++ -L/usr/i686-w64-mingw32/lib  -o bin/Release/win/p1 obj/Release/win/main.o   -lstdc++ -lgcc -lodbc32 -lwsock32 -lwinspool -lwinmm -lshell32 -lcomctl32 -lctl3d32 -lodbc32 -ladvapi32 -lodbc32 -lwsock32 -lopengl32 -lglu32 -lole32 -loleaut32 -luuid  
Output size is 107,04 KB
Process terminated with status 0 (0 minutes, 0 seconds)
0 errors, 0 warnings (0 minutes, 0 seconds)

并且 Build Messages 仅显示以下一行:

||=== Build finished: 0 errors, 0 warnings (0 minutes, 0 seconds) ===|

就像没有编译一样。有谁知道发生了什么?

【问题讨论】:

  • 我建议在i686-w64-mingw32-g++之后添加-v
  • -v 是什么意思,我可以在代码块的什么地方添加这个选项?
  • 也就是说,用i686-w64-mingw32-g++ -v 编译以了解真正发生的事情......我不知道你的代码块是什么(可能是一些无用的IDE)。您总是可以在某个终端中键入编译命令...
  • There 是我通过选项-v 得到的全部,我看不出有什么不好。你说 c::B 没用,那么你更喜欢哪个 IDE? :)
  • 我没有使用任何 IDE,我使用的是emacs。有人称它为 IDE,我称它为编辑器。

标签: linux c++11 mingw cross-compiling codeblocks


【解决方案1】:
Output size is 107,04 KB

所以你得到了一个大小为 107kB 的可执行文件。那没什么?

||=== Build finished: 0 errors, 0 warnings

我会很高兴代替你...你想要编译错误作为编译器已经运行的证据吗?

【讨论】:

  • 是的,它很酷,但是“i586-mingw32msvc”一直在创建一个 1MB 的文件,它显示了 20 个警告
  • @Tom 如果您想要更多警告:-Wall,如果您想要更大的文件:-g
  • 完成...仍然没有警告;)我不知道这是否真的编译?
  • 如果你想要一个警告,你可以在你的一些源文件中添加#warning I am here
  • 一般来说,使用命令在终端内工作。也许编辑您的问题以显示您尝试了哪些命令,以及它们的一些结果。而 IIRC,i686-w64-mingw32-g++ 可能会使用一些 ccache 魔法 - 但我不确定 - 这可以解释近 0 秒的编译时间。您是否考虑在您的main 之后添加一些调试printf?你有一些构造的静态数据吗?你能用一些调试器吗?
【解决方案2】:

我解决了这个问题,所以我自己回答,也许对其他人会有帮助,所以我只需要添加以下链接器选项:-static-libgcc -static-libstdc++ -L 就是这样。

【讨论】:

    猜你喜欢
    • 2011-04-18
    • 2015-05-13
    • 2013-04-05
    • 2015-03-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多