如何使用msys在Windows上静态链接iconv?

时间:2012-11-30 21:16:21

标签: mingw iconv msys

我正在使用mingw gcc和msys来构建许多GNU实用程序。在过去,由于需要不同版本的libiconv的不同可执行文件导致了很多问题,所以为了避免这个问题,我想将iconv静态链接到可执行文件中。

我使用mingw和msys with configure --enable-static构建了libiconv。这将创建DLL,.dll.a导入库和普通.a静态库。

然而,当我尝试构建另一个与简单的-liconv链接的程序时,我得到了链接的DLL。我认为ld由于某种原因更喜欢导入库而不是静态库(一般来说不是一个糟糕的选择) ,这是一个特例)。

如何确保我构建的程序是静态链接的?一个显而易见的方法是在执行构建时删除.dll.a文件。这可能是最简单的选择,但我很好奇 - 是否有一个链接器标志我可以设置(通过像LDFLAGS之类的东西)来强制iconv被静态加载(理想情况下,不会影响其他库,但是在紧要关头我会没事的静态加载所有库)

1 个答案:

答案 0 :(得分:1)

你是对的,默认情况下它会链接“共享”,除非你特意告诉它链接静态。您可以通过几种方式执行此操作,无论哪种方式适用于您

make CC='gcc -static'
make LDFLAGS=-static
make LDFLAGS=libiconv.a

你只需要查看Makefile并找到适合它的最不具侵入性的方法。

Example