GNU/DebianLinux和LD

GNU/DebianLinux和LD,linux,libraries,ld,dynamic-library,Linux,Libraries,Ld,Dynamic Library,假设我有一个由多个动态库组成的大型项目,这些库都将安装到/usr/lib或/usr/lib64。现在让我们假设其中一个库调用另一个已编译库。如果我将相互依赖的两个库放在同一位置,ld程序是否能够允许这两个库相互调用?是,只要它们的位置存在于目录集中ld在中搜索库。您可以使用LD\u LIBRARY\u PATHEnvironment变量覆盖此集合 请参阅手册,它将解决您的问题。是的,只要它们的位置存在于目录集ld中的库搜索中。您可以使用LD\u LIBRARY\u PATHEnvironment

假设我有一个由多个动态库组成的大型项目,这些库都将安装到/usr/lib或/usr/lib64。现在让我们假设其中一个库调用另一个已编译库。如果我将相互依赖的两个库放在同一位置,ld程序是否能够允许这两个库相互调用?

是,只要它们的位置存在于目录集中
ld
在中搜索库。您可以使用
LD\u LIBRARY\u PATH
Environment变量覆盖此集合


请参阅手册,它将解决您的问题。

是的,只要它们的位置存在于目录集
ld
中的库搜索中。您可以使用
LD\u LIBRARY\u PATH
Environment变量覆盖此集合


请参阅手册,它将解决您的问题。

答案可能是肯定的,但在两个库之间使用循环引用是非常糟糕的设计(即
liba.so
包含函数
fa
,从
libb.so
调用函数
fb
,从
liba.so
调用函数
ga

您应该将这两个库合并到一个
libbig中。因此
。别担心,库可能会很大(有些公司的Linux库有几百兆的代码)


Debian上的包
binutils-gold
中的
gold
链接器应该对您有用。它比
binutils
中较旧的链接器工作得更快。答案可能是肯定的,但在两个库之间有循环引用是非常糟糕的设计(即
liba.so
包含函数
fa
,从
libb.so
调用函数
fb
,从
liba.so
调用函数
ga

您应该将这两个库合并到一个
libbig中。因此
。别担心,库可能会很大(有些公司的Linux库有几百兆的代码)


Debian上的包
binutils-gold
中的
gold
链接器应该对您有用。如果您指的是运行时动态链接器/lib/ld linux*(与/usr/bin/ld相反),那么它比
binutils
中的旧链接器工作得更快,它将在LD_LIBRARY_路径中查找库,该路径通常包括/usr/lib和/usr/lib64

通常,/lib/ld-*用于.a库,因此运行时的库;/usr/bin/ld用于编译时的.a库


但是,如果您的库使用dlopen()或类似工具来查找其他库(例如插件),则它们可能具有其他查找机制。例如,许多插件系统将使用dlopen读取特定(一个或多个)目录中的每个库。

如果您指的是运行时动态链接器/lib/ld linux*(与/usr/bin/ld相反),它将在ld_LIBRARY_路径中查找库,该路径通常包括/usr/lib和/usr/lib64

通常,/lib/ld-*用于.a库,因此运行时的库;/usr/bin/ld用于编译时的.a库

但是,如果您的库正在使用dlopen()或类似工具来查找其他库(例如插件),则它们可能具有其他查找机制。例如,许多插件系统将使用dlopen读取特定(一个或多个)目录中的每个库