.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 program
讯享网export 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..com/program
输出应该是:
讯享网Sum: 7Product: 12
这个简单的例子展示了如何创建一个静态库,并在另一个程序中使用它。记住,静态库在编译时被整合到可执行文件中,因此每次编译使用该库的程序时,都需要指定库的路径和名称。
想了解更多
赶紧扫码关注

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容,请联系我们,一经查实,本站将立刻删除。
如需转载请保留出处:https://51itzy.com/kjqy/150207.html