使用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
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

友情链接更多精彩内容