C++ 静态和动态链接库

C++ 静态和动态链接库,c++,shared-libraries,static-libraries,static-linking,dynamic-linking,C++,Shared Libraries,Static Libraries,Static Linking,Dynamic Linking,我有一些关于链接图书馆的问题 链接器如何决定要链接的库是静态链接还是动态链接?是否由文件扩展名(.a/.so)决定 可以动态链接一个库吗 是否可以在没有源的情况下将.a库转换为.so库 链接器通常通过查看扩展来决定如何链接库,但这主要取决于链接器。AIX链接器有一些非常奇特的行为。此外,如果库的.so和.so版本都位于同一位置,则为链接器提供的命令行开关将确定它使用哪一个 有点。您可以将.a链接到.so,但是会有性能问题-共享库应该使用位置无关的代码构建,以获得最佳性能。根据代码的不同,链接器可

我有一些关于链接图书馆的问题

链接器如何决定要链接的库是静态链接还是动态链接?是否由文件扩展名(.a/.so)决定

可以动态链接一个库吗

是否可以在没有源的情况下将.a库转换为.so库

  • 链接器通常通过查看扩展来决定如何链接库,但这主要取决于链接器。AIX链接器有一些非常奇特的行为。此外,如果库的.so和.so版本都位于同一位置,则为链接器提供的命令行开关将确定它使用哪一个
  • 有点。您可以将.a链接到.so,但是会有性能问题-共享库应该使用位置无关的代码构建,以获得最佳性能。根据代码的不同,链接器可能会拒绝链接它,因为它无法修补重新定位信息。但是你不能告诉链接器把.a当作.so
  • 如上所述——也许吧
  • 链接器通常通过查看扩展来决定如何链接库,但这主要取决于链接器。AIX链接器有一些非常奇特的行为。此外,如果库的.so和.so版本都位于同一位置,则为链接器提供的命令行开关将确定它使用哪一个
  • 有点。您可以将.a链接到.so,但是会有性能问题-共享库应该使用位置无关的代码构建,以获得最佳性能。根据代码的不同,链接器可能会拒绝链接它,因为它无法修补重新定位信息。但是你不能告诉链接器把.a当作.so
  • 如上所述——也许吧

  • 默认情况下,如果在gcc链接器的搜索路径中找到了这两种类型的库,则gcc链接器将动态链接到.so文件。如前所述,您可以使用命令行参数克服此问题。

    默认情况下,如果在其搜索路径中找到了这两种类型的库,则gcc链接器将动态链接到.so文件。如前所述,您可以使用命令行参数克服这一问题。

    是、否、否。您通常需要独立编译代码位置,使其可作为共享库使用;除非明确要求,否则通常不会这样做。@KerrekSB这不应该是一个答案吗?是的,不,不。您通常需要独立编译代码位置,以使其可用作共享库;除非明确要求,否则通常不会这样做。@KerrekSB这不应该是答案吗?