Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/71.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C 避免过于具体的依赖关系_C_Linux_Build_Dependencies_Shared Libraries - Fatal编程技术网

C 避免过于具体的依赖关系

C 避免过于具体的依赖关系,c,linux,build,dependencies,shared-libraries,C,Linux,Build,Dependencies,Shared Libraries,我正在Linux上使用一个以二进制形式分发的共享C库。问题在于,依赖项被设置为需要开发机器上可用的版本。例如,每个版本都需要(当时)最新的glibc,并且在其系统上只需要libreadline的确切版本 我已经联系了开发者,他们不知道该怎么办。据我所知,他们没有意识到使用了最新的特性,所以库应该继续使用旧的依赖项。我认为他们在Linux上使用gcc,但他们也在使用复杂的make系统来控制为Windows和Unix构建的其他编译器 如何以及在多大程度上管理构建过程,以便库只需要足够版本的依赖项,并

我正在Linux上使用一个以二进制形式分发的共享C库。问题在于,依赖项被设置为需要开发机器上可用的版本。例如,每个版本都需要(当时)最新的glibc,并且在其系统上只需要libreadline的确切版本

我已经联系了开发者,他们不知道该怎么办。据我所知,他们没有意识到使用了最新的特性,所以库应该继续使用旧的依赖项。我认为他们在Linux上使用gcc,但他们也在使用复杂的make系统来控制为Windows和Unix构建的其他编译器

如何以及在多大程度上管理构建过程,以便库只需要足够版本的依赖项,并且也可以接受更高版本

这是一个相关的问题

编辑:说得清楚一点,我想知道如何构建程序,以便它们接受具有特定版本号或更高版本号的依赖项。无论开发人员编译还是我编译,我都希望能够分发一个二进制文件,它不需要构建环境中存在的依赖项的确切版本

编辑2:在重新表述了问题之后,我意识到这一点以前已经讨论过很多次了。一些最好的问答:


这不是很能激发自信。他们应该建立在一个稳定的基线版本上,它可能只是一个虚拟安装。Linux的某些版本复制了构建环境,因此包不会链接到更新的库版本

openSUSE构建服务允许开发者构建二进制软件包,用于各种应用程序

IIRC readline是一个GPL程序,在上检查表明它是GPL v 3,因此如果他们使用libreadline函数,并应向您提供其库的源代码,则可能违反GPL。我不确定您指的是rpm/apt包依赖关系,还是它们的库实际上在调用libreadline


如果有必要,您可以始终从rpm或apt软件包中提取文件,以避免因包装不良而导致的软件管理器问题。

这就是我更喜欢使用免费开源软件的原因。您需要依靠制作人的善意为您的系统构建软件。它们是rpm/apt“依赖项”还是库代码调用libreadline本身?@Basile:Oops,很抱歉,暗示源代码不可用。该库非常大,而且很难构建。@ROB1311:该库正在调用特定版本。如果该库有可用的源代码,那么为其创建一个构建服务项目应该是一个更好的解决方案,因为它将为大量系统生成本机包。如果是运行时调用,那么它们应该链接到较旧的操作系统版本,因为较新的库版本被认为是兼容的。您的主要观点有点隐晦,基本解决方案只是构建在您希望支持的最旧系统上,并依赖于与较新库版本的兼容性。