.so文件

so文件是lunix中的共享库与windows下dll文件类似

制作.so文件

gcc时候加-fPIC,这可以使gcc生产与位置无关(与具体地址无关的代码 偏移地址 首地址)

链接时候gcc使用-shared选项,指示生成一个共享库文件

共享文件名要以lib开头,扩展名为.so

第一步,编写源文件,源文件里不能有main函数,so用C写最好不要用C++

第二部,编写makefile,so文件必须用lib开头,扩展名必须用.so,编译的时候gcc加-fPIC选项.链接的时候gcc -shared选项


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 -g -o  $@  -c  $<

clean:

rm -rf $(EXEC) $(OBJS)


使用.so

第一步,在源文件当中include相关头文件

第二步,在gcc链接的时候增加-l选项,告诉gcc需要链接指定的so文件

$(CC)  -o $(EXEC) $(OBJS) -lmyso -L.

gcc不会再当前目录下寻找.so,让gcc在当前目录寻找.so,我们需要加 -L.(.表示当前目录)

对于lunix操作系统不在当前目录下寻找.so文件,需要在.bash_profile文件中添加如下语句

export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:.

. .bash_profile 立即生效

默认lunix放在/usr目录下 lib  lib64(64位操作系统) 


c++文件使用.so

头文件如下

#ifdef __cplusplus

extern "c"{

#endif

int max(int a, int b);

int add(int a, int b);

#ifdef __cplusplus

}

#endif

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容