.o为后缀。gcc -c source_file.c
-c选项告诉编译器只编译源文件,不进行链接。ar工具将所有目标文件打包成一个静态库。ar rcs liblibrary_name.a object_file1.o object_file2.o ...
r:插入文件,如果静态库不存在则创建。c:在创建或插入文件时不进行警告。s:创建索引,用于从库中读取单个文件。
gcc program.c -L/path/to/library -llibrary_name -o program
-L:指定静态库的搜索路径。
-l:指定要链接的库,不要加前缀lib和后缀.a。
gcc program.c -L/path/to/library -l:object_file_name.o -o programexport LD_LIBRARY_PATH=/path/to/library:$LD_LIBRARY_PATH静态库在编译时被整合到最终的可执行文件中,因此可执行文件的大小会增大。
静态库中的代码在编译时被复制到可执行文件中,因此如果多个程序使用同一个静态库,那么每个程序都会包含一份代码的副本,这可能会导致内存浪费。
使用静态库的程序在运行时不需要静态库文件,因为所有需要的代码都已经包含在可执行文件中了。
通过一个简单的例子来说明静态库的制作与使用:
add.c 和 multiply.c。add.c:
int add(int a, int b) {return a + b;}
multiply.c:
int multiply(int a, int b) {return a * b;}
gcc 编译这些源文件生成目标文件。gcc -c add.c -o add.ogcc -c multiply.c -o multiply.o
ar 工具将目标文件打包成静态库。ar rcs libmath.a add.o multiply.o
main.c 使用 add 和 multiply 函数。main.c:
int add(int, int);int multiply(int, int);int main() {int sum = add(3, 4);int product = multiply(3, 4);printf("Sum: %d\n", sum);printf("Product: %d\n", product);return 0;}编译程序:在编译 main.c时,我们需要指定静态库的路径和库名。
gcc main.c -L. -lmath -o program
-L.指定了静态库的搜索路径(当前目录)。-lmath指定了要链接的库,libmath.a中的math。
运行程序:编译完成后,你可以运行生成的程序。
https://mp.weixin.qq.com/program输出应该是:
Sum: 7Product: 12
这个简单的例子展示了如何创建一个静态库,并在另一个程序中使用它。记住,静态库在编译时被整合到可执行文件中,因此每次编译使用该库的程序时,都需要指定库的路径和名称。

想了解更多
赶紧扫码关注
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
如需转载请保留出处:https://bianchenghao.cn/bian-cheng-ri-ji/5136.html