ICode9

精准搜索请尝试: 精确搜索
首页 > 系统相关> 文章详细

c – 处理linux上的库依赖项

2019-06-26 05:37:52  阅读:238  来源: 互联网

标签:c-2 linux dependencies openssl libcurl


我在我的项目中使用libcurl,它依赖于openssl和运行时的其他.so.
这种依赖性在屁股中是一种痛苦,因为不同的分配/版本可能包含不同的openssl版本.

例如,如果我在Ubuntu 9.10上编译我的应用程序,我在Ubuntu 11.10上运行时遇到问题.

我看到两个选项如何解决这个问题,但对我的情况来说,它们都不够好:

>打包我的应用程序,让包管理器解决这类问题
>静态链接所有deps

我的应用程序非常小,打包/维护它会有点过分.此外,其中一个要求是它应该可以下载并运行.所以,(1)对我来说不是一个opton.

静态链接(2)可能是不错的解决方案,但似乎没有libopenssl,libcrypto和libcurl附带的其他传递依赖的静态二进制分发.

从理论上讲,我可以尝试手动构建libcurl背后的libs动物园,但似乎这会使维护变得更加复杂.

所以,这是问题 – 我错过了什么吗?是否有一种不那么痛苦的方式来做我想要的Linux世界(Ubuntu具体),减少痛苦?欢迎任何建议.

解决方法:

I am using libcurl in my project and it depends on openssl and bunch
of other .so in runtime. This dependency is kind of pain in the ass,
since different distributives/versions may contain different openssl
versions.

For example i am experiencing problems running on Ubuntu 11.10 if i
compilled my app on Ubuntu 9.10.

首先,这有什么问题?如果您从较旧版本的Ubuntu升级到较新版本的Ubuntu,则不应该遇到问题.如果我没有弄错,您只需要指定所需库的最低版本,并且包管理器应该能够安装合适的版本.除非您使用已弃用的功能,否则较新版本的库不应破坏现有应用程序.

My app is really tiny and package/maintain it would be overkill. Plus,
one of the requirements is that it should be download-and-run’able.
So, (1) is not an opton for me.

对于Linux(尤其是Ubuntu,Fedora和其他顶级发行版),打包实际上是分发应用程序的方式. Download-install-run是一个Windows的东西,它不是人们在Linux上安装软件的方式(好吧,Linux新手可能……)

您还应该尝试接收发行版,这将减轻您的负担.至少在Ubuntu上迈出的第一步是创建自己的PPA(https://help.launchpad.net/Packaging/PPA).

Static link (2) would be not-bad solution but it seems that there is
no static binary distributions of libopenssl, libcrypto and other
transitive dependencies that come with libcurl.

这通常是一件非常糟糕的事情.静态链接或仅将库与您的应用程序捆绑在一起会增加更新它的负担,如果您不更新它们,则会产生影响.所以,我不推荐这种方法.有关详细信息,请参见此处:http://www.dwheeler.com/blog/2012/04/03/#insecure-libraries

这是Fedora的政策:http://fedoraproject.org/wiki/Packaging:No_Bundled_Libraries

So, here is the question – am I missing something? Is there a less
painful way to do what I want in linux world (Ubuntu to be specific)
with less pain? Any suggestions are welcomed.

这里有两件事要做:

>打包:理想情况下,对于Ubuntu / Debian和Fedora / Suse的转换,这将是deb.另一种流行的替代方法是使用autotools(autoconf / automake),以便用户可以使用所需的pre-req构建应用程序.最后一个选项是提供Makefile和README,并希望您的用户做正确的事情.
>分布:理想情况下,这与发行版存储库有关. Ubuntu PPA是一个很好的起点.另一种方法是在您自己的站点上托管二进制文件/包.

大多数流行的应用程序都为流行的Linux发行版提供.deb / .rpm以及带有autotools的.tar.gz,用于构建具有不同打包系统的发行版.

最后,让我问你一下:你是否专注于减少提供应用程序的痛苦,或者让用户减少获取应用程序的痛苦?

标签:c-2,linux,dependencies,openssl,libcurl
来源: https://codeday.me/bug/20190626/1290680.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有