欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

linux 制作静态动态链接库

程序员文章站 2022-05-12 23:33:05
...

静态库和动态库的区别:.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

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

相关标签: linux