我正在使用mingw gcc和msys来构建许多GNU实用程序。在过去,由于需要不同版本的libiconv的不同可执行文件导致了很多问题,所以为了避免这个问题,我想将iconv静态链接到可执行文件中。
我使用mingw和msys with configure --enable-static构建了libiconv。这将创建DLL,.dll.a导入库和普通.a静态库。
然而,当我尝试构建另一个与简单的-liconv链接的程序时,我得到了链接的DLL。我认为ld由于某种原因更喜欢导入库而不是静态库(一般来说不是一个糟糕的选择) ,这是一个特例)。
如何确保我构建的程序是静态链接的?一个显而易见的方法是在执行构建时删除.dll.a文件。这可能是最简单的选择,但我很好奇 - 是否有一个链接器标志我可以设置(通过像LDFLAGS之类的东西)来强制iconv被静态加载(理想情况下,不会影响其他库,但是在紧要关头我会没事的静态加载所有库)
答案 0 :(得分:1)
你是对的,默认情况下它会链接“共享”,除非你特意告诉它链接静态。您可以通过几种方式执行此操作,无论哪种方式适用于您
make CC='gcc -static'
make LDFLAGS=-static
make LDFLAGS=libiconv.a
你只需要查看Makefile
并找到适合它的最不具侵入性的方法。