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

Pau*_*ore 5 mingw msys iconv

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

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

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

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

小智 3

你是对的,默认情况下它将链接“共享”,除非你专门告诉它链接静态。您可以通过几种方法来做到这一点,选择适合您的方法

make CC='gcc -static'
make LDFLAGS=-static
make LDFLAGS=libiconv.a
Run Code Online (Sandbox Code Playgroud)

您只需要查看Makefile并找到干扰最小的方式来安装它。

例子