Linux库文件使用说明

Linux库文件使用说明


在Linux上编写C或C++代码,我们经常会见到三种文件,即源文件.cpp,头文件.h,库文件.a和.so。其中源文件及头文件(-I选项指定路径)比较好理解,我们来说说所谓的第三方库文件吧


为什么我们需要库文件?

  • 在进行编程时,我们常常会使用到第三方库现成的功能(不重复造轮子,接口的实现由第三方提供),那么我们就会需要在编译的时候将第三方库链接进来(实现接口),从而能够让我们的程序得以正常运作。
  • 标准c库由于使用频率比较高,所以自动链接,否则每次gcc编译时都要加-lc就很麻烦。而像数学库、c++标准库用gcc编译时就需要链接-lm-lstdc++

库文件的分类及其表示?

  • 库文件主要分成两类:静态库动态库
    • 静态库是在程序链接过程中,直接将静态库中的所有代码嵌入到宿主代码中去,最终生成的EXE文件将比较大,在EXE的运行过程不需要静态库文件支持
    • 动态库是对实现部分(.dll或.so文件)的导出部分的声明,编译链接后只是将导出声明部分编译到宿主程序,EXE文件执行时动态的引用与卸载(即运行时需要dll文件的支持)
  • 库文件的表示:
    • 静态库文件:libxxx.a,在链接的时候使用-lxxx进行链接
    • 动态库文件:libxxx.so,在链接的时候使用-lxxx进行链接

库文件是如何生成的?

如何来使用库文件?

  • 库文件是编译后的二进制代码,使用-llib选项链接库时,会链接静态或动态库,优先链接动态库
  • -l 明确指定链接哪个库是因为第三方库如果函数有重名怎么办?,用这种方法可以避免这种迷惑
  • 共享库链接方式
    • 直接链接
      gcc xxx.c ./libmylib.so
    • 配置环境变量 LIBRARY_PATH,把库所在的路径配置进去
      gcc xxx.c -lmyku
    • 库路径不在默认路径下,通过-L添加库路径
      gcc xxx.c -lmyku -L./

用户环境下的LIBRARY_PATH与LD_LIBRARY_PATH同库文件是什么关系?

  • 开发时,设置LIBRARY_PATH,以便gcc能找到编译所需要的共享链接库
  • 发布时,设置LD_LIBRARY_PATH,以便程序加载运行时能够自动找到需要的动态链接库

如何查看可执行文件的链接库文件?

  • ldd myexe查看该可执行程序的链接库文件

猜你喜欢

转载自blog.csdn.net/TedOne_LZ/article/details/80855264