【发布时间】:2017-10-12 19:40:36
【问题描述】:
我在我的项目中使用 libcurl,它在运行时依赖于 openssl 和一堆其他 .so。
这种依赖有点让人头疼,因为不同的发行版/版本可能包含不同的 openssl 版本。
例如,如果我在 Ubuntu 9.10 上编译我的应用程序,我会在 Ubuntu 11.10 上运行时遇到问题。
我看到了两个如何解决这个问题的选项,但它们都不足以解决我的问题:
打包我的应用,让包管理器解决这类问题
静态链接所有部门
我的应用程序非常小,打包/维护它会有点过头了。另外,要求之一是它应该可以下载和运行。所以,(1) 对我来说不是一个选项。
静态链接 (2) 将是不错的解决方案,但似乎没有 libopenssl、libcrypto 和 libcurl 附带的其他传递依赖项的静态二进制分发。
理论上我可以尝试在 libcurl 后面手动构建所有库库,但这似乎会使维护变得更加复杂。
那么,问题来了——我错过了什么吗?在 linux 世界(具体来说是 Ubuntu)中,有没有一种不那么痛苦的方式来做我想做的事,而且痛苦更少?欢迎提出任何建议。
【问题讨论】:
-
如果你不使用很多libcurl函数,你可以编写简单的GET,POST调用你自己并手动解析HTTP响应。您将很容易找到有关如何解析此数据的示例代码。
-
如果您不使用 GUI,我无法想象会有超过三四个库。您提到的两个库:libcurl 和 openssl - 在向后兼容性方面非常好。问:你确定这里真的有问题吗?
-
如果它是一个小应用程序,它可以用 Python 编写,其中这些库是标准的,版本控制不是问题。
-
其实我做不到。好吧,至少它不会像看起来那么便宜。问题是这个应用程序是跨平台的,应该能够在 windows/linux/mac 上工作,我需要 libcurl 作为抽象层。另外,我不仅需要纯 HTTP,还需要 HTTPS,这让事情变得有点复杂。
-
Python 和其他需要 vm 的东西不是一个选项。应用程序是跨平台的,强制 Windows 用户安装 vm 是我负担不起的。
标签: c++ linux dependencies openssl libcurl