linux 制作静态动态链接库

静态库和动态库的区别:.so动态库,.a静态库 

头文件 myprint.h

#ifndef __MY_PRINT_
#define __MY_PRINT_

#include <stdio.h>

void print();

#endif

源文件 myprint.cpp

#include "myprint.h"

void print()
{
	printf("make .a and .so\n");
}

main文件:

#include "myprint.h"

int main()
{
	print();
	return 0;
}

静态库制作:

gcc -c myprint.cpp

生成myprint.o文件

ar -cr libmyprint.a myprint.o

生成libmyprint.a

静态库的使用

gcc -o main main.c -static -lmyprint -L.

-L指定链接时静态库的路径 ,"."表示当前路径。

执行./main即可,此时main可以拷贝到任何位置都可以执行,不再需要外部库的支持。

动态库制作:

gcc -c myprint.cpp

生成myprint.o文件

gcc -shared -fpic libmyprint.so myprint.o

生成libmyprint.so

动态链接库的使用

gcc -o main main.c -lmyprint -L.

运行./main

发现报错,找不到动态链接库libmyprint.so

这是因为在进行动态链接的时候,程序并不会在当前目录下寻找,二是在系统默认路径下寻找,/usr/lib。我们可以将libmyprint.so移到该目录下,再来执行main。但是这种方法不推荐,还有另一种方法,在运行程序前,指定库路径

LD_LIBRARY_PATH=. ./main

此时可以看到程序执行成功

发布了33 篇原创文章 · 获赞 5 · 访问量 1万+

猜你喜欢

转载自blog.csdn.net/qiukapi/article/details/91344962