加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > Windows > 正文

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

发布时间:2020-12-14 02:45:39 所属栏目:Windows 来源:网络整理
导读:我正在使用mingw gcc和msys来构建一些GNU实用程序.在过去,我遇到了很多由需要不同版本的libiconv的不同可执行文件引起的问题,所以为了避免这个问题,我想将iconv静态链接到可执行文件中. 我使用mingw和msys with configure –enable-static构建了libiconv.这
我正在使用mingw gcc和msys来构建一些GNU实用程序.在过去,我遇到了很多由需要不同版本的libiconv的不同可执行文件引起的问题,所以为了避免这个问题,我想将iconv静态链接到可执行文件中.

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

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

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

解决方法

你是对的,默认情况下它会链接“共享”,除非你特意告诉它链接静态.你可以用几种方法做到这一点,无论哪种方式都适合你

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

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

Example

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读