使用dlopen加载dylib调用oc函数和c函数

首先使用Xcode生成一个dylib,其中有2个方法,一个是oc的方法ttt,一个是c函数sss

使用dlopen加载dylib调用oc函数和c函数_第1张图片
-w601

使用dlopen加载dylib调用oc函数和c函数_第2张图片
-w636

然后打包成 dylib,这里要注意,如果我们要生成后缀为 dylib的文件,需要如下操作,首先右键 .xcodeproj文件显示包内容,然后打开 project.pbxproj,修改
productType = "com.apple.product-type.framework";
productType = "com.apple.product-type.library.dynamic"
最后run之后就会生成 .dylib的动态库。


调用C函数

使用dlopen加载dylib调用oc函数和c函数_第3张图片
-w534

成功打印出来了 我的c方法

调用OC方法

这里我想当然的和调用c一个路子,直接将sss改成ttt
,然后运行结果打印出来为func error,通过断点查看到cmethod函数指针为NULL

使用dlopen加载dylib调用oc函数和c函数_第4张图片
-w669

后来在网上查到资料得知 dlsym用的参数是符号名而不是 selector,然后我使用 nm命令查看了 dylib的符号表
使用dlopen加载dylib调用oc函数和c函数_第5张图片
-w398

然后尝试将 dlsym的参数改为 [Test ttt]-[Test ttt],最终结果都是为 NULL


最终查找资料还是回到了使用OC的方法,如图


使用dlopen加载dylib调用oc函数和c函数_第6张图片
image.png

但是会报错,这个我们只要确定我们的方法名是正确的,我们就直接先临时写一个类不让其报错即可,最终结果就可以了!


使用dlopen加载dylib调用oc函数和c函数_第7张图片
image.png

你可能感兴趣的:(使用dlopen加载dylib调用oc函数和c函数)