首先使用Xcode
生成一个dylib
,其中有2个方法,一个是oc的方法ttt
,一个是c函数sss
-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
后来在网上查到资料得知
dlsym
用的参数是符号名而不是selector
,然后我使用nm
命令查看了dylib
的符号表-w398
然后尝试将
dlsym
的参数改为[Test ttt]
、-[Test ttt]
,最终结果都是为NULL
最终查找资料还是回到了使用OC的方法,如图
image.png
但是会报错,这个我们只要确定我们的方法名是正确的,我们就直接先临时写一个类不让其报错即可,最终结果就可以了!
image.png
网友评论