Linux库函数
链接方式分为两种:静态链接、动态链接。
静态链接
由链接器在链接时将库的内容加入到可执行程序中。
优点:
• 对运行环境的依赖性较小,具有较好的兼容性。
• 程序在运行的时候不需要库的支持。
缺点:
• 生成的程序比较大,需要更多的系统资源,在装入内存时会消耗更多的时间。
• 库函数有了更新,必须重新编译应用程序。
动态链接
链接器在链接时仅仅建立与所需库函数之间的链接关系,在程序运行时才将所需资源调入可执行程序。
优点:
• 在需要的时候才调入对应的资源函数。
• 简化程序的升级,有着较小的程序体积。
• 实现进程之间的资源共享(避免重复拷贝)。
缺点:
• 依赖动态库,不能独立运行。
• 动态库依赖版本问题严重。
• 程序在运行的时候需要库的支持。
静态链接库与动态链接库
• 静态链接库在Linux中后缀为.a,以lib开头。如:libtestlib.a
• 动态链接库在Linux中后缀为.so,以lib开头。如:libtestlib.so
• 动态编译:gcc hello.c -o hello
• 静态编译:gcc hello.c -static -o hello
• 使用gcc 源文件名 -o 目标文件名时,系统默认采用动态链接的方式进行编译程序,若想采用静态编译,加入-static参数。
• 当静态库与动态库重名时,系统会优先连接动态库,或者可以加入-static指定使用静态库。