<a href="#1%E5%BA%93%E7%9A%84%E6%A6%82%E5%BF%B5">1库的概念</a>
<a href="#2%E9%9D%99%E6%80%81%E5%BA%93">2静态库</a>
<a href="#2-1-%E9%9D%99%E6%80%81%E5%BA%93%E7%9A%84%E6%A6%82%E5%BF%B5">2-1 静态库的概念</a>
<a href="#2-2-%E9%9D%99%E6%80%81%E5%BA%93%E7%9A%84%E5%88%9B%E5%BB%BA">2-2 静态库的创建</a>
<a href="#2-2-1-%E9%9D%99%E6%80%81%E5%BA%93%E5%88%9B%E5%BB%BA%E7%9A%84%E5%91%BD%E4%BB%A4">2-2-1 静态库创建的命令</a>
<a href="#2-2-2-%E9%9D%99%E6%80%81%E5%BA%93%E5%88%9B%E5%BB%BA%E7%9A%84%E5%87%86%E5%A4%87%E5%B7%A5%E4%BD%9C">2-2-2 静态库创建的准备工作</a>
<a href="#2-2-3-%E5%88%9B%E5%BB%BA%E9%9D%99%E6%80%81%E5%BA%93%E7%9A%84%E4%BE%8B%E5%AD%90">2-2-3 创建静态库的例子</a>
<a href="#2-3-%E9%9D%99%E6%80%81%E5%BA%93%E7%9A%84%E4%BD%BF%E7%94%A8">2-3 静态库的使用</a>
<a href="#2-3-1-%E9%9D%99%E6%80%81%E5%BA%93%E4%BD%BF%E7%94%A8%E7%9A%84%E5%91%BD%E4%BB%A4">2-3-1 静态库使用的命令</a>
<a href="#2-3-2-%E9%9D%99%E6%80%81%E5%BA%93%E4%BD%BF%E7%94%A8%E7%9A%84%E4%BE%8B%E5%AD%90">2-3-2 静态库使用的例子</a>
<a href="#3%E5%85%B1%E4%BA%AB%E5%BA%93%E5%8A%A8%E6%80%81%E9%93%BE%E6%8E%A5%E5%BA%93">3共享库动态链接库</a>
<a href="#3-1-%E5%85%B1%E4%BA%AB%E5%BA%93%E7%9A%84%E6%A6%82%E5%BF%B5">3-1 共享库的概念</a>
<a href="#3-2-%E5%85%B1%E4%BA%AB%E5%BA%93%E7%9A%84%E5%88%9B%E5%BB%BA">3-2 共享库的创建</a>
<a href="#3-2-1-%E5%85%B1%E4%BA%AB%E5%BA%93%E7%9A%84%E5%88%9B%E5%BB%BA%E5%91%BD%E4%BB%A4">3-2-1 共享库的创建命令</a>
<a href="#3-2-2-%E5%85%B1%E4%BA%AB%E5%BA%93%E7%9A%84%E5%88%9B%E5%BB%BA%E4%BE%8B%E5%AD%90">3-2-2 共享库的创建例子</a>
<a href="#3-3-%E5%85%B1%E4%BA%AB%E5%BA%93%E7%9A%84%E4%BD%BF%E7%94%A8">3-3 共享库的使用</a>
<a href="#3-3-1-%E5%85%B1%E4%BA%AB%E5%BA%93%E7%9A%84%E4%BD%BF%E7%94%A8%E5%91%BD%E4%BB%A4">3-3-1 共享库的使用命令</a>
<a href="#3-3-2-%E5%85%B1%E4%BA%AB%E5%BA%93%E7%9A%84%E4%BD%BF%E7%94%A8%E4%BE%8B%E5%AD%90">3-3-2 共享库的使用例子</a>
<a href="#4%E4%B8%8D%E4%BD%BF%E7%94%A8%E5%BA%93%E7%9A%84%E6%96%B9%E6%B3%95">4不使用库的方法</a>
函数库是由系统建立的且有一定功能的函数集合。库中存放函数的名称和对应的目标代码,以及连接过程中所需的重定位信息,但是库中对应的函数的源代码一般是不可见的,而对应的头文件中可以看到它的对外接口(函数原型)。
Linux中标准的C函数库放置在<code>/usr/lib</code>下,以文件形式存放。用户也可以根据自己的所需建立自己的用户函数库。函数库分为静态库(.a)和共享库(.so,ShareObj),共享库在windows环境也叫动态链接库(.dll)。
静态库是一些.o目标文件的集合,一般以.a形式结尾。静态库在程序链接阶段使用,链接器将程序要用到的函数从库中提取出来,并整合到程序中,程序运行不再使用静态库了。由于每个程序要用到函数都从库提取并整合在一起,所以可执行文件夹会比较大。
<code>r</code>:表示将.o目标文件加入到静态库中;
<code>c</code>:表示创建静态库;
<code>s</code>:表示生产索引;
或者
<code>-Ldir</code>:表示指定库文件所在的路径中,默认在库路径在<code>/usr/lib</code>目录下;
<code>-lname</code>:表示库目录的库文件<code>libname.a</code>或<code>libname.so</code>。如果库文件不是以<code>lib</code>开头,如hello.a,只能用用hello.a,不能用<code>-lhello</code>。
删除静态库文件不会影响到可执行文件的运行。
共享库即动态链接库,在linux中以.so(share object)为后缀,在windows中以.dll为后缀。程序开始启动运行时,加载所需的函数,程序运行时也需要共享库的支持。共享库链接出来的文件比静态库要小得多。Linux中所有标准的共享库存放在<code>/usr/lib</code>目录中。
<code>-shared</code>:表示要创建共享库;
<code>-fpci或-fPCI</code>:表示创建产生独立目标代码,具体应用取决于平台;
运行可执行文件提示找汪以库文件的解决方案
<code>sudo cp libmymathfun2.so /usr/lib</code>
<code>export LD_LIBRARY_PATH=库文件目录</code>
删除静态库文件会影响到可执行文件的运行!(提示找不到库文件)
test1
test2
Wu_Being博客声明:本人博客欢迎转载,请标明博客原文和原链接!谢谢!
如果你看完这篇博文,觉得对你有帮助,并且愿意付赞助费,那么我会更有动力写下去。