在Ubuntu上使用mingw进行Windows交叉编译时缺少“libiconv.h”

时间:2017-03-31 06:52:12

标签: c++ mingw sdl cross-compiling

我一直在研究SDL中的程序,我想将它发送给只运行Windows环境的朋友。我做了一些阅读,发现我应该使用mingw为Windows进行交叉编译。我找到并编译的二进制文件是x86_64-w64-mingw32-g ++,但是我在编译程序时遇到了一些问题。使用以下命令,我收到以下错误:

/usr/bin/x86_64-w64-mingw32-g++ sapphire.cpp `pkg-config --cflags --libs sdl2` -lSDL2_image -lSDL2_mixer -lSDL2_ttf -std=c++11
fatal error: iconv.h: No such file or directory

虽然我意识到我最终应该制作一个makefile,但我现在不打算这样做。

我尝试从here安装iconv(版本1.15)并使用以下命令进行编译:

./configure --prefix=/usr/local
make
make all

我的iconv.h位于/ usr / include但如果我包含了我因为缺少gnu / stubs.h而得到另一个错误,如果我包含那个,那么我会得到无数错误,我不知道如何/如果我能修好here。有谁知道我怎么可能解决这个问题?我将不胜感激任何帮助!

提前致谢!

1 个答案:

答案 0 :(得分:0)

您可以在交叉编译器环境中将pkg-config与mingw一起使用,但是您应该注意pkg-config搜索其.pc文件的位置。

我假设您的mingw交叉编译器安装在/ usr / x86_64-w64-mingw32中,将其更改为其“include”和“lib”子目录所在的安装路径。

如果SDL windows developpement包安装在您计算机上的相同前缀中,并且安装有正确的pkg-config .pc文件,您可以这样做:

export PKG_CONFIG_PATH=/usr/x86_64-w64-mingw32/lib/pkgconfig

然后从命令行尝试pkg-config:

pkg-config sdl2 --cflags

这应该指向/ usr / x86_64-w64-mingw32内的一些路径,如果它确实你的编译将会成功。

请注意,如果要编译crosscompile包(比如你尝试编译的iconv),你应该添加到./configure脚本参数:

--host=x86_64-w64-mingw32 --prefix=/usr/xx86_64-w64-mingw32

...这可能有效或无效,具体取决于软件包是否支持mingw32编译器。

你编译iconv的方式在/ usr / local中构建了另一个linux版本!

注意:据我所知,Ubuntu没有为SDL2提供Windows软件包,而其他Linux发行版也这样做,所以你需要用我之前给出的选项交叉编译SDL2可以编译你的代码。 SDL2 确实支持使用mingw进行交叉编译。