Linux下的静态库安装-应该类似于动态库安装吗?

Linux下的静态库安装-应该类似于动态库安装吗?,linux,makefile,installation,shared-libraries,static-libraries,Linux,Makefile,Installation,Shared Libraries,Static Libraries,我花了一上午的时间研究如何在makefile中在Linux下安装共享库 那很好;我现在有了我的共享对象和一对指向它的软链接,其中一个由ldconfig创建,另一个由我创建 现在,我还可以将我的库构建为静态库 当我检查/usr/lib时,我看到那里的.a文件就在那里。没有符号链接,文件名中没有版本和版本编号的排列 我是否应该像排列共享对象那样排列带有符号链接的静态库,或者实际上习惯上只是将一个未经修饰的静态库放置在/usr/local/lib中?与共享库不同,放置在/lib中的静态库不参与动态链接

我花了一上午的时间研究如何在makefile中在Linux下安装共享库

那很好;我现在有了我的共享对象和一对指向它的软链接,其中一个由ldconfig创建,另一个由我创建

现在,我还可以将我的库构建为静态库

当我检查/usr/lib时,我看到那里的.a文件就在那里。没有符号链接,文件名中没有版本和版本编号的排列


我是否应该像排列共享对象那样排列带有符号链接的静态库,或者实际上习惯上只是将一个未经修饰的静态库放置在/usr/local/lib中?

与共享库不同,放置在
/lib
中的静态库不参与动态链接依赖项解析。它们仅在您构建应用程序时使用。因此,不需要在文件名中插入符号链接和精确的版本号

当您将应用程序与静态库链接时,链接器只嵌入它在
/lib
文件夹中找到的库的代码。如果在另一个系统上,具有相同名称的静态库不同,那么您的应用程序甚至不知道这一点。因为它包含编译时使用的静态库的代码,不需要在运行它的系统中查找它


因此,静态库的安装应该不同于共享库的安装:实际上不需要在
/lib
目录中进行细粒度版本控制。

与共享库不同,放置在
/lib
中的静态库不参与动态链接依赖项解析。它们仅在您构建应用程序时使用。因此,不需要在文件名中插入符号链接和精确的版本号

当您将应用程序与静态库链接时,链接器只嵌入它在
/lib
文件夹中找到的库的代码。如果在另一个系统上,具有相同名称的静态库不同,那么您的应用程序甚至不知道这一点。因为它包含编译时使用的静态库的代码,不需要在运行它的系统中查找它


因此,静态库的安装应该不同于共享库的安装:实际上不需要在
/lib
目录中进行细粒度版本控制。

如果我有多个版本的静态库,会发生什么,我希望链接到不同项目中的不同版本?在构建时:在不同的目录中准备不同的实例,并将makefile指向特定的实例。对于共享库,基本上是一样的。运行时:系统中根本不需要静态库,因为静态库中的代码嵌入到可执行文件中;你已经静态链接了,所以到那时一切都结束了。然而,我对建筑很清楚;我说过两个项目静态链接到同一个第三方静态库的不同版本。当静态库以相同的名称('library.a')转储到库目录中时,它们如何区分该库的不同版本?您也无法区分共享库。
/lib
中存在不同版本的共享库,不是为了针对它们进行构建,而是为了运行针对不同版本构建的应用程序!要针对同一库的不同版本进行构建,请创建几个非系统目录,并设置
-L
-I
编译器选项以指向它们。我了解到,“library.so”是软链接的原因是,您可以针对除最新版本以外的库版本进行构建,例如,您将链接器将找到的链接名指向您要根据其生成的版本,而其他链接名指向其库版本的最新版本(以便您可以对其运行)。如果我有多个版本的静态库,会发生什么情况,我希望链接到不同项目中的不同版本?在构建时:在不同的目录中准备不同的实例,并将makefile指向特定的实例。对于共享库,基本上是一样的。运行时:系统中根本不需要静态库,因为静态库中的代码嵌入到可执行文件中;你已经静态链接了,所以到那时一切都结束了。然而,我对建筑很清楚;我说过两个项目静态链接到同一个第三方静态库的不同版本。当静态库以相同的名称('library.a')转储到库目录中时,它们如何区分该库的不同版本?您也无法区分共享库。
/lib
中存在不同版本的共享库,不是为了针对它们进行构建,而是为了运行针对不同版本构建的应用程序!要针对同一库的不同版本进行构建,请创建几个非系统目录,并设置
-L
-I
编译器选项以指向它们。我了解到,“library.so”是软链接的原因是,您可以针对除最新版本以外的库版本进行构建,例如,您将链接器找到的链接名指向您要根据其生成的版本,而其他链接名指向其库版本的最新版本(以便您可以针对其运行)。