Eug*_*Loy 5 c++ linux dependencies openssl libcurl
我在我的项目中使用libcurl,它依赖于openssl和其他一堆.so在运行时。
这种依赖有点麻烦,因为不同的发行版/版本可能包含不同的opensl版本。
例如,如果我在Ubuntu 9.10上编译应用程序,则遇到在Ubuntu 11.10上运行的问题。
我看到了两种解决方案,但是对于我的情况,它们都不足够:
打包我的应用程序,然后让程序包管理器解决此类问题
静态链接所有部门
我的应用程序确实很小,并且打包/维护它会过大。另外,要求之一是它应可下载并运行。因此,(1)对我而言不是一个选择。
静态链接(2)并不是一个不错的解决方案,但是似乎libcurs并没有libopenssl,libcrypto和其他可传递依赖项的静态二进制分发。
从理论上讲,我可以尝试在libcurl后面手动构建所有的libs动物园,但这似乎会使维护变得更加复杂。
所以,这是一个问题-我错过了什么吗?有没有一种更轻松的方式来减轻我在Linux世界中的痛苦(具体来说是Ubuntu)?任何建议都欢迎。
小智 3
我在项目中使用 libcurl,它在运行时依赖于 openssl 和一堆其他 .so。这种依赖性有点让人头疼,因为不同的发行版/版本可能包含不同的 openssl 版本。
例如,如果我在 Ubuntu 9.10 上编译我的应用程序,我在 Ubuntu 11.10 上运行时会遇到问题。
首先,这有什么问题吗?如果您从旧版本的 Ubuntu 升级到新版本,应该不会有问题。如果我没有记错的话,您只需要指定所需的库的最低版本,包管理器应该能够安装合适的版本。较新版本的库不应破坏现有应用程序,除非您使用已弃用的功能。
我的应用程序真的很小,打包/维护它就有点矫枉过正了。另外,要求之一是它应该是可下载和运行的。所以,(1)对我来说不是一个选择。
对于 Linux(尤其是 Ubuntu、Fedora 和其他顶级发行版),打包实际上是分发应用程序的方式。下载-安装-运行是 Windows 的事情,而不是 Linux 上的人安装软件的方式(好吧,Linux 新手可能......)
您还应该尝试接受发行版,这将随着时间的推移减轻您的负担。至少在 Ubuntu 上,实现此目标的第一步是创建您自己的 PPA ( https://help.launchpad.net/Packaging/PPA )。
静态链接 (2) 是不错的解决方案,但似乎没有 libopenssl、libcrypto 和 libcurl 附带的其他传递依赖项的静态二进制发行版。
这通常是一件非常非常糟糕的事情。静态链接或仅将库与您的应用程序捆绑在一起会给您带来更新的负担,如果您不更新这些内容,则会产生影响。所以,我不推荐这种方法。有关更多详细信息,请参阅此处:http://www.dwheeler.com/blog/2012/04/03/#insecure-libraries
这是 Fedora 的政策:http://fedoraproject.org/wiki/Packaging:No_Bundled_Libraries
那么,问题来了——我错过了什么吗?有没有一种不那么痛苦的方法可以在Linux世界(特别是Ubuntu)中以更少的痛苦做我想做的事情?欢迎任何建议。
这里确实有两件事要做:
大多数流行的应用程序都为流行的 Linux 发行版提供 .deb/.rpm,以及带有自动工具的 .tar.gz,用于在具有不同打包系统的发行版上进行构建。
最后,让我问你一个问题:你的重点是让你提供应用程序时不那么痛苦,还是让你的用户获取你的应用程序时不那么痛苦?
| 归档时间: |
|
| 查看次数: |
3403 次 |
| 最近记录: |