.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.o
gcc -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: 7
Product: 12
这个简单的例子展示了如何创建一个静态库,并在另一个程序中使用它。记住,静态库在编译时被整合到可执行文件中,因此每次编译使用该库的程序时,都需要指定库的路径和名称。

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