当前位置:嗨网首页>书籍在线阅读

18-使用静态库取代共享库

  
选择背景色: 黄橙 洋红 淡粉 水蓝 草绿 白色 选择字体: 宋体 黑体 微软雅黑 楷体 选择字体大小: 恢复默认

41.13 使用静态库取代共享库

虽然在大多数情况下都应该使用共享库,但在某些场景中静态库则更加适合。特别地,静态链接的应用程序包含了它在运行时所需的全局代码这一事实是非常有利的。如当用户不希望或者无法在运行程序的系统上安装共享库或者程序在另一个无法使用共享库的环境中运行时(如可能是一个chroot监狱(jail)),静态链接就派上用场了。此外,即使是一个兼容的共享库升级也可能会在无意中引入一个Bug,从而导致应用程序无法正常工作。通过静态链接应用程序就能确保系统上共享库的变动不会影响到它并且它已经拥有了运行所需的全局代码(付出的代价就是程序更大了,从而会需要更多的磁盘空间和内存)。

在默认情况下,当链接器能够选择名称一样的共享库和静态库时(如在链接时使用–Lsomedir –ldemo并且libdemo.so和libdemo.a都存在)会优先使用共享库。要强制使用库的静态版本则可以完成下列之一。

  • 在gcc命令行中指定静态库的路径名(包括.a扩展)。
  • 在gcc命令行中指定-static选项。
  • 使用–Wl,–Bstatic和–Wl,–Bdynamic gcc选项来显式地指定链接器选择共享库还是静态库。在gcc命令行中可以使用-l选项来混合这些选项。链接器会按照选项被指定时的顺序来处理这些选项。