C++ “失踪”;“libiconv.h”;在Ubuntu上使用mingw进行Windows交叉编译时

C++ “失踪”;“libiconv.h”;在Ubuntu上使用mingw进行Windows交叉编译时,c++,mingw,sdl,cross-compiling,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_

我一直在用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,但我现在不打算这么做

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

./configure --prefix=/usr/local
make
make all
我的iconv.h位于/usr/include中,但是如果我包含它,我会因为缺少gnu/stubs.h而得到另一个错误,如果我包含它,那么我会得到无数错误,我不确定如何/是否可以修复这些错误。有人知道我该怎么解决这个问题吗?我将感谢任何帮助


提前谢谢

您可以在交叉编译器环境中将pkg config与mingw一起使用,但您应该注意pkg config在何处搜索他的.pc文件

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

提供的SDL windows Development软件包安装在您的计算机上的相同前缀中,并且安装有正确的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中的某个路径,如果这样做,编译将成功

请注意,如果要编译用于交叉编译的包(如您尝试编译的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进行交叉编译。

我非常确定,当您以这种方式使用pkg config时,它将为您提供库并包含主机系统的文件,我猜即使编译成功,链接也会失败。在上述情况下,您实际使用主机编译器在主机系统中编译并安装了iconv,而不是针对mingw。问题的答案是如何妥善处理事情