如何在mac osx 中制作dylib和使用dylib

如何在mac osx 中制作dylib和使用dylib,第1张

如何在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)

}

1.使用otool -L 查看运行程序依赖路径

    例1:otool -L xxx.app/Contents/MacOS/xxx

    例2:otool -L xxx.dylib.com

2.修改.app工程.dylib库依赖路径:install_name_tool -change 旧.dylib库路径 新.dylib库路径 xxx.app/Contents/MacOS/xxx

     例:install_name_tool -change /usr/local/libcrypto.1.0.0.dylib  /Library/xxx/xxx/extlib/libcrypto.1.0.0.dylib  xxx.app/Contents/MacOS/xxx

     注:@executable_path:可执行文件所在的目录。可使用@executable_path设置引用库的相对路径,@executable_path/../../../extlib/libcrypto.1.0.0.dylib

      @loader_path.     @rpath

3.修改.dylib库依赖路径:install_name_tool -id 要使用的路径 旧路径

     例:install_name_tool -id /Library/xxx/xxx/extlib/libcrypto.1.0.0.dylib  libcrypto.1.0.0.dylib


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/tougao/11642432.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-17
下一篇 2023-05-17

发表评论

登录后才能评论

评论列表(0条)

保存