您的位置:首页 > 运维架构 > Linux

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

2015-11-09 18:24 686 查看
// 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
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: