我在“宽带症候群”发了个试验品相关的帖子
/t/898299这个试验品用到了 Botan2 这个库,原本我是打算全部都用静态编译的,FreeBSD (用 clang )和 Windows (用 MSVC )都成功了,偏偏 Linux (用 GCC )和 NetBSD (也是 GCC )就失败。其他人同样尝试过在 musl 下静态编译,一样失败:
https://github.com/cnbatch/udphop/issues/3其中 Windows 平台用的是 vcpkg 安装 Botan2 ,FreeBSD 、NetBSD 和 Linux 都用自带的包管理器安装。
于是几天前发布的 Linux 版本二进制文件都是动态编译,分了 3 个版本:Fedora 最新的 Botan 2.19.3 、Debian 10 的 Botan 2.9 、Debian 11 的 Botan 2.17
结果 musl 用户就无法用了。
我给 Botan 的作者提了个 Issue ,问他怎样才能成功地使用 libbotan-2.a 做静态编译
https://github.com/randombit/botan/issues/3085得到的回答是,用动态编译就能够编译成功
这不就死循环无解了嘛
还好,Botan 的作者还有另外一个解决办法,那就是生成 botan_all.h 和 botan_all.cpp ,直接 #include 起来
唯一缺点就是生成的二进制文件过于巨大
在使用 botan_all.h 和 botan_all.cpp 之前我还尝试过在 Linux 安装 clang 13 ,并指定用 clang 编译项目,结果仍然一样,libbotan-2.a 无法用于静态编译
这也难怪 Fedora 版本(我在 rawhide 看到的)的 Botan2 及 devel 版本都不附带 libbotan-2.a ,这样就可以无条件使用动态链接库版本,避免编译失败
是否还有其他办法可以在 GNU 工具链下用 libbotan-2.a 做静态链接?
这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。
https://www.v2ex.com/t/899654
V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。
V2EX is a community of developers, designers and creative people.