linux 制作静态动态链接库

2 篇文章 0 订阅

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

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值