在我的上一篇文章“静态库”中,我解释了库如何为链接器提供一个可在其中找到目标文件的内存位置。 这减少了编译所需的时间,并使在以后的程序中包含相同的目标文件变得更加容易。
静态库本质上是目标文件的索引存档。 当使用静态库编译可执行文件时,其组件.o文件中包含的机器代码将直接包含在可执行文件中。 不幸的是,该文件的大小随其引用的符号数成正比增长,并且每次修改组件对象文件时也必须重新编译该文件。
动态库 (也称为共享库)不是在可执行文件中包含目标文件的实际代码,而是仅包含其内存地址,从而使最终程序更小。 它们还允许程序在运行时运行更新或修改的目标文件, 而无需重新编译。 动态库的缺点是对目标文件的更新或库名称的更改会产生不良结果,甚至破坏程序。
要使用libname.so编译可执行文件,请输入:
gcc program_code.c -L。 -lname -o程序名
在搜索共享库时,链接器首先检查由LD_LIBRARY_PATH环境变量包含的标准目录的冒号分隔列表,然后是/usr/lib和/usr/local/lib等更通用的路径。 -L. 如果在以前的搜索中找不到该选项,则该选项将为编译器提供一个用于搜索的附加目录。 在这种情况下, . 告诉它搜索当前创建libname.so工作目录。 动态库的实际名称键入为lname不带lib前缀或.so后缀,但以l标志开头。 这只是表明name是库的名称。 同样, -o表示“输出命名如下”,而program_name是最终可执行文件的名称。


构建和使用静态和共享的“ C”库
LUPG主页] [教程] [相关材料] [随笔] [项目构想] [发送评论] v1.0.1目录…
docencia.ac.upc.edu
gcc(1):GNU项目C / C ++编译器– Linux手册页
gcc程序接受选项和文件名作为操作数。 许多选项具有多字母名称; 因此多个…
linux.die.net
生活比代码更重要。 在我的博客底部检查推荐的杀手song: