在 Ubuntu 上使用 mingw 交叉编译 Windows 时缺少 "libiconv.h"
Missing "libiconv.h" when crosscompiling for Windows with mingw on Ubuntu
我一直在用 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 如果我包含它,那么我会得到无数错误我不确定 how/if 我是否可以修复 here。有谁知道我该如何解决这个问题?如果有任何帮助,我将不胜感激!
提前致谢!
您可以在交叉编译器环境中将 pkg-config 与 mingw 一起使用,但您应该注意 pkg-config 在哪里搜索他的 .pc 文件。
假设你的mingw交叉编译器安装在/usr/x86_64-w64-mingw32,改成他的"include"和"lib"子目录所在的安装路径
提供 SDL windows 开发包安装在您计算机上的相同前缀中,并且安装具有正确的 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交叉编译。
我一直在用 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 如果我包含它,那么我会得到无数错误我不确定 how/if 我是否可以修复 here。有谁知道我该如何解决这个问题?如果有任何帮助,我将不胜感激!
提前致谢!
您可以在交叉编译器环境中将 pkg-config 与 mingw 一起使用,但您应该注意 pkg-config 在哪里搜索他的 .pc 文件。
假设你的mingw交叉编译器安装在/usr/x86_64-w64-mingw32,改成他的"include"和"lib"子目录所在的安装路径
提供 SDL windows 开发包安装在您计算机上的相同前缀中,并且安装具有正确的 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交叉编译。