动态链接库使用举例

December 09, 2023
测试
测试
测试
测试
3 分钟阅读

前面转了两篇动态链接库的使用方法,下面举例说下高级用法如何使用:

先附上源码,共五个文件

/*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

继续阅读

更多来自我们博客的帖子

如何安装 BuddyPress
由 测试 December 17, 2023
经过差不多一年的开发,BuddyPress 这个基于 WordPress Mu 的 SNS 插件正式版终于发布了。BuddyPress...
阅读更多
Filter如何工作
由 测试 December 17, 2023
在 web.xml...
阅读更多
如何理解CGAffineTransform
由 测试 December 17, 2023
CGAffineTransform A structure for holding an affine transformation matrix. ...
阅读更多