注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

倚天剑

青春要在奔跑中度过

 
 
 

日志

 
 
 
 

如何在Mac OSX 中制作dylib和使用dylib  

2013-05-19 21:23:43|  分类: 开发 |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |

原文:http://qvb3d.iteye.com/blog/1176920


如何在Mac OSX 中制作dylib和使用dylib

本文本着简单易读的方式给朋友们,本人为原创

1.首先是构建一个函数库

  编辑add.c

  int add(int a,int b)

  {

  return a+b;

  }

  int axb(int a,int b)

  {

  return a*b;

  }

  保存

  其中两个函数  add  axb

  这是简单的写的,复杂的自己开发,这里主要介绍方法

2.编译函数库

  gcc -c add.c -o add.o

  //下面是linux系统时

  ar rcs libadd.a add.o  

  //如果你是linux 就用这种库

  //下面是Mac OSX 

  gcc add.o -dynamiclib -current_version 1.0  -o libadd.dylib

  得到 libadd.dylib

3.编辑testadd.c

  #include <stdio.h>

  #include <stdlib.h>

  #include <dlfcn.h>

  int main(int argc,char *argv[])

  {

int a,b;

a=10;

b=9;

        int c;

c=add(a,b);

printf("%d\n",c);

return 1;

  }

  保存

4.编译testadd.c

  gcc testadd.c -o testadd -L. -ladd

  ./testadd

 

  输出19

 

5.编辑dladd.c

  #include <stdio.h>

  #include <stdlib.h>

  #include <dlfcn.h>

  int main(int argc,char *argv[])

  {

int *ab;

void *h=dlopen("./libadd.dylib",RTLD_LAZY);

ab=dlsym(h,"add");

printf("add=address is 0x %x\n",ab);

dlclose(h);

return 1;

  }

  这个是为了查看函数库在库中的地址的

6.编译dladd.c

   gcc dladd.c -o dladd -ldl

   ./dladd

 

   add=address is 0x 23fe2

   这是输出的地址了



一下内容为另一篇文章提取出来的:http://blog.csdn.net/leonpengweicn/article/details/7427621
上面说的如何在代码里调用,貌似有些含糊不清,下面是调用的示例:

        NSString *dyPath = @"/pengpeng/temp/libadd.dylib";//这是生成的.dylib文件的位置
        void *handle = dlopen([dyPath cStringUsingEncoding:NSUTF8StringEncoding], RTLD_LAZY);
        if (handle) {
            NSLog(@"open dylib success");
            int (*function)(int a,int b) = dlsym(handle, "add");//add为方法名,这里用函数指针
            if (function) {
                NSLog(@"open function success,1+1=%d",function(1,1));
                
            }
            dlclose(handle);
        }
  评论这张
 
阅读(608)| 评论(0)
推荐 转载

历史上的今天

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2017