Linux 编译静态链接库与动态链接库的方法

本文详细介绍使用GCC进行C语言程序的编译过程,包括单文件编译、多文件编译、预处理、生成汇编代码、创建静态库及动态库,并介绍了如何配置Linux系统动态链接库搜索路径。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

// hello.c
#include <stdio.h>

int main(int argc, char *argv[])
{
    printf("Hello World!\n");

    return 0;
}

1、编译生成可执行文件
gcc -o test hello.c

2、编译生成目标文件
gcc -c -o test.o hello.c

// string.c
#define ENDSTRING   '\0'

int StrLen(char *string)
{
    int len = 0;

    while (*string++ != ENDSTRING)
        len++;

    return len;
}

// main.c
#include <stdio.h>

extern int StrLen(char *str);

int main(int argc, char *argv[])
{
    char src[] = "Hello Dymatic";
    printf("string length is:%d\n", StrLen(src));

    return 0;
}

3、多文件编译
gcc -o test string.c main.c

4、预处理
gcc -E string.c -o string.i

5、编译成汇编语言
gcc -S string.c

6、生成静态链接库 .a 文件
ar -rcs libstr.a string.o

7、使用静态链接库
gcc -o test main.c -L./ -lstr 或 gcc -o test main.c libstr.a	// 在使用-l选项时,-o选项要在-l选项之前出现,否则gcc会认为-l是生成的目标而出错

8、生成动态链接库
gcc -fPIC -shared -Wl,-soname,libstr.so -o libstr.so.1 string.c
-Wall:包含warning信息;
-fPIC:编译动态库所必须的, 输出不依赖位置的代码;
-shared:编译动态库必须选项;
-W1:向连接器传递一些参数,在这里传递的参数有"-soname", "libstr.so";
-o:动态库的名字,在这个例子里最终生成动态库libstr.so.1;

9、Linux系统中动态链接库搜索路径配置文件
/etc/ld.so.conf
也可以通过ldconfig <动态链接库所在绝对路径>,来添加动态链接库搜索路径

10、编译可执行程序test调用libstr.so
gcc -o test main.c -L./ -lstr 或 gcc -o test main.c libstr.so

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值