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

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

-w601

-w636

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


调用C函数

-w534

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

调用OC方法

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

-w669

后来在网上查到资料得知dlsym用的参数是符号名而不是selector,然后我使用nm命令查看了dylib的符号表
-w398

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


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


image.png

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


image.png