前面转了两篇动态链接库的使用方法,下面举例说下高级用法如何使用:
先附上源码,共五个文件
/*print.h*/
#include <stdio.h>
#include <stdlib.h>
void print(char * msg);
/*print.c*/
void print(char * msg)
{
printf("msg:%s/n", msg);
}
/*main.c*/
#include "print.h"
int main(int argc, char ** argv)
{
if (argc < 2)
{
printf("usage: %s msg/n", argv[0]);
}
print(argv[1]);
return 0;
}
#makefile.lib
all : libmy.so
SRC = print.c
TGT = $(SRC:.c=.o)
$(SRC) : print.h
@touch $@
%.o : %.c
cc -c $?
libmy.so : $(TGT)
cc -s -shared -o $@ $(TGT)
cp libmy.so /home/derrywang/so
#makefile
OBJECTS = print.o
main : main.c libmy.so
gcc -o main main.c libmy.so
libmy.so : $(OBJECTS)
gcc -shared -o libmy.so $(OBJECTS)
clean:
rm -f main libmy.so $(OBJECTS)
使用方法如下:
1. 建立存放so的目录
mkdir /home/derrywang/so
2. 修改系统配置文件
vim /etc/ld.so.conf
加入/home/derrywang/so
保存后,更新:/sbin/ldconfig –v
3.编译so,make -f makefile.lib
4.编译main,make
5.执行 ./main helloworld,会显示结果如下
msg:helloworld
6.验证下so是不是动态加载的,只需要修改print.c中打印,改成printf("msg=%s/n", msg);,然后执行make -f makefile.lib,再执行./main, 会显示结果如下
msg=helloworld