Linux下c/c++ so文件的生成和使用

16 篇文章 0 订阅
14 篇文章 1 订阅

Linux下so文件的生成和使用

说明:

1、源文件中不能有main函数;写so文件的时候使用C语言写,c/c++都可调用。

2、在使用的时候,一定要保证存在头文件和.so文件。

(创建目录testso,并把myso.h和libmyso.so拷贝到testso目录下)

程序:

创建一个名字为libmyso.so的共享库文件,然后再定义一个程序来调用这个共享库文件。

步骤:

2.1)创建生成so文件的makefile:

.SUFFIXES:.c .o


CC=gcc

SRCS=myso.c
OBJS=$(SRCS:.c=.o)
EXEC=libmyso.so

start: $(OBJS)
	$(CC) -shared -o $(EXEC) $(OBJS)
	@echo "-----------------------------OK-----------------------"

.c.o:
	$(CC) -fPIC -Wall -o $@ -c $<

clean:
	rm -rf $(EXEC) $(OBJS)

2.2)编写头文件myso.h:

#ifndef __MYSO_H__
#define __MYSO_H__

#ifdef __cplusplus
extern "C"{
#endif

#include <stdio.h>
#include <stdlib.h>
// 求两个参数的最大值
int mymax(int num1, int num2);
// 求两个参数的和
int mysum(int num1, int num2);

#ifdef __cplusplus
}
#endif

#endif

2.3)编写源文件myso.c:

#include "myso.h"

int mymax(int num1, int num2)
{
	if (num1 > num2)
		return num1;
	return num2;
}

int mysum(int num1, int num2)
{
	return num1 + num2;
}

2.4)编译并执行程序,生成共享库文件so:

$ make
gcc -fPIC -Wall -o myso.o -c myso.c
gcc -shared -o libmyso.so myso.o
-----------------------------OK-----------------------
$ ls
libmyso.so  makefile  myso.c  myso.h  myso.o

2. 5)编写使用so文件的makefile:

.SUFFIXES:.c .o

CC=gcc

SRCS=main.c
OBJS=$(SRCS:.c=.o)
EXEC=main

start: $(OBJS)
	$(CC) -o $(EXEC) $(OBJS) -L. -lmyso
	@echo "-----------------------------OK-----------------------"

.c.o:
	$(CC) -Wall -o $@ -c $<

clean:
	rm -rf $(EXEC) $(OBJS)

2.6)编写源文件main.c:

#include "myso.h"
 
int main(void)
{
	printf("mysum(5, 10) = %d\n", mysum(5, 10));
	printf("mymax(5, 10) = %d\n", mymax(5, 10));
	return 0;
}

2.7)编译并执行程序:

$ make
gcc -Wall -o main.o -c main.c
gcc -o main main.o -L. -lmyso
-----------------------------OK-----------------------
$ main
mysum(5, 10) = 15
mymax(5, 10) = 10

3 .1)c++ 工程调用

编写源文件main.cpp

 extern "C"{
#include "myso.h"
}
int main(void)
{
	printf("mysum(5, 10) = %d\n", mysum(5, 10));
	printf("mymax(5, 10) = %d\n", mymax(5, 10));
	return 0;
}

3.2)编译demo.cpp

g++ -Wall -o main.o -c main.cpp
g++ -o main main.o -L. -lmyso
$ main
mysum(5, 10) = 15
mymax(5, 10) = 10

上面的程序,完成了so文件的生成和使用,一定要注意这个例子。

  • 4
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值