Linux下so文件的生成和使用
说明:
(创建目录testso,并把myso.h和libmyso.so拷贝到testso目录下)
程序:
创建一个名字为libmyso.so的共享库文件,然后再定义一个程序来调用这个共享库文件。
步骤:
.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)
#ifndef __MYSO_H__
#define __MYSO_H__
#ifdef __cplusplus
extern "C"{
#endif
#include
#include
// 求两个参数的最大值
int mymax(int num1, int num2);
// 求两个参数的和
int mysum(int num1, int num2);
#ifdef __cplusplus
}
#endif
#endif
#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;
}
$ 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
.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)
#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;
}
$ 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
编写源文件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;
}
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文件的生成和使用,一定要注意这个例子。