天天看點

Linux下so檔案的生成和使用

環境:Vmware Workstation;CentOS-6.4-x86_64

說明:

1、源檔案中不能有main函數;寫so檔案的時候使用C語言寫,不要用C++。

2、在使用的時候,一定要保證存在頭檔案和.so檔案。

(建立目錄testso,并把myso.h和libmyso.so拷貝到testso目錄下)

程式:

建立一個名字為libmyso.so的共享庫檔案,然後再定義一個程式來調用這個共享庫檔案。

步驟:

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 [email protected] -c $<

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

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
           

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;
}
           

4、編譯并執行程式,生成共享庫檔案so:

[[email protected] mycode]$ make
gcc -fPIC -Wall -o myso.o -c myso.c
gcc -shared -o libmyso.so myso.o
-----------------------------OK-----------------------
[[email protected] mycode]$ ls
libmyso.so  makefile  myso.c  myso.h  myso.o
           

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 [email protected] -c $<

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

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;
}
           

7、編譯并執行程式:

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

上面的程式,完成了so檔案的生成和使用,一定要注意這個例子。

PS:根據傳智播客視訊學習整理得出。

繼續閱讀