如何在 Windows 上构建 gnu `libiconv`?

Posted

技术标签:

【中文标题】如何在 Windows 上构建 gnu `libiconv`?【英文标题】:How to build gnu `libiconv` on & for windows? 【发布时间】:2010-04-28 21:57:10 【问题描述】:

我想在 Windows 上构建一个静态库(*.LIB 文件)GNU libiconv,以便与 Visual C++ 中的其他库一起使用。我正在使用的其他库是使用“多线程 DLL”(/MD)运行时选项构建的。因此,我需要使用相同的选项构建 libiconv。

问题是 libiconv 使用 GNU 构建系统,我想使用 /MD 选项进行编译。可以在这里查看 libiconv 的源码结构:http://cvs.savannah.gnu.org/viewvc/libiconv/?root=libiconv

先生。 Zlatkovic为libxml2维护GNU libiconv的windows端口

你可以在这里看到它们:

ftp://xmlsoft.org/libxml2/win32/iconv-1.9.2.win32.zip

我不能使用他的端口。我需要从最新版本的 libiconv-1.13 构建。我想知道这家伙是怎么移植的?有人可以告诉我如何构建 *.lib 并使用 MSVC 编译它吗?

编辑:

实际上,我需要构建更多具有相同设置的 gnu 库。所以,如果我得到一个图书馆的解决方案。我可以为所有其他人做同样的事情。

【问题讨论】:

【参考方案1】:

我在 The Code Project 发现 PARK Youngho 的 How to Build libiconv with Microsoft Visual Studio 完整且干净(适用于 VS2010 和 GNU libiconv 1.14)。

【讨论】:

【参考方案2】:

对您的回答稍加补充。 我遇到了同样的问题,发现 MinGW + MSYS 解决方案非常完美。

不过,我还需要进一步生成 .lib 文件,以便能够与生成的 dll 链接。

这是我发现的:

使用 dumpbin(Visual Studio 工具)从 dll 生成 .def 文件。

使用 lib 程序从 .def 生成 .lib 文件(也是 Visual Studio 工具)

这允许您在适当的情况下指定一些链接标志。 此处详细说明的所有内容(我不是此方法的作者): http://wiki.videolan.org/GenerateLibFromDll

我还意识到这对 lib/dll 可以与 MD 和 MDd 库链接。

希望能帮助找到这篇文章的人,就像它帮助了我一样。

-大卫

【讨论】:

【参考方案3】:

我是 OP。 MSYS 正是我要找的东西。

只需安装 MinGW & MSYS,其中包含 shell sh.exe & make.exe,您可以使用它们配置和生成Makefile,之后您可以使用 make.exe 运行它。

就这么简单。

【讨论】:

【参考方案4】:

使用MinGW 编译它们,如果需要,使用 Msys 作为环境。根据邮件列表,MinGW 的 .a 文件显然与 .lib 文件格式相同(只需重命名)。您可能需要先检查 iconv 静态库是否已包含在 MinGW 下载/文件系统中。

编辑:它在 msys (C:\msys\1.0\lib) 中,以及:

libiconv.a libiconv.dll.a libiconv.la

另外

libiconv-2.dll(在 C:\msys\1.0\local\bin 中)

编辑:你需要的 libiconv 在这里吗?这些版本似乎有 MSVC makefile :) http://www.opensource.apple.com/source/libiconv/

【讨论】:

但是我将如何运行 ./configure 这是一个 shell 脚本?此外,我将如何为 MinGW 的 g++ 编译器提供“多线程 DLL”运行时选项。 您可能不会遇到开发人员试图避免的 MinGW 工具链同样的问题。基本上,MSVC 编译器/链接器的多线程选项允许 DLL 使用多个堆而不是单个堆,快速浏览一下,并防止出现问题。 好吧,我不能在整个项目中使用 GNU 工具链。因为 1. 我对 MinGW 不是很熟悉 2. 我正在使用 MFC 和 3. 所有其他库都可以使用 MSVC 并且我在 MSVC 中编译它们。我只需要一种方法来为 Windows 编译 gnu 库。重要的问题是./configure 将如何执行创建生成文件?我也不能为 libiconv 使用预编译的 lib 文件,因为如果我自己编译它。我将使用相同的方法来编译其他所需的 gnu 库。 感谢您提供替代方法。但我需要知道如何做到这一点,因为我需要使用 /MD 在 MSVC 上构建其他 GNU 库 您查看opensource.apple.com/source/libiconv 是否有您需要的版本?不过编号似乎有点奇怪。

以上是关于如何在 Windows 上构建 gnu `libiconv`?的主要内容,如果未能解决你的问题,请参考以下文章

如何在Apple OS X 10.5 Leopard上构建和安装GNU wget

让 GNU Make 和 NMake 默认使用不同的 makefile

如何在 pythonanywhere 上安装 GNU MPFR 库

g ++中的fstream链接错误与-std = gnu ++ 0x

c mktime 在 Windows 和 GNU/Linux 上是不是不同?

gnu 和 gnu-arm 编译器可以在同一个系统上共存吗?