使用dlopen加載dylib調(diào)用oc函數(shù)和c函數(shù)

首先使用Xcode生成一個(gè)dylib,其中有2個(gè)方法,一個(gè)是oc的方法ttt,一個(gè)是c函數(shù)sss

-w601

-w636

然后打包成dylib,這里要注意,如果我們要生成后綴為dylib的文件,需要如下操作,首先右鍵.xcodeproj文件顯示包內(nèi)容,然后打開project.pbxproj,修改
productType = "com.apple.product-type.framework";
productType = "com.apple.product-type.library.dynamic"
最后run之后就會(huì)生成.dylib的動(dòng)態(tài)庫(kù)。


調(diào)用C函數(shù)

-w534

成功打印出來(lái)了我的c方法

調(diào)用OC方法

這里我想當(dāng)然的和調(diào)用c一個(gè)路子,直接將sss改成ttt
,然后運(yùn)行結(jié)果打印出來(lái)為func error,通過(guò)斷點(diǎn)查看到cmethod函數(shù)指針為NULL

-w669

后來(lái)在網(wǎng)上查到資料得知dlsym用的參數(shù)是符號(hào)名而不是selector,然后我使用nm命令查看了dylib的符號(hào)表
-w398

然后嘗試將dlsym的參數(shù)改為[Test ttt]、-[Test ttt],最終結(jié)果都是為NULL


最終查找資料還是回到了使用OC的方法,如圖


image.png

但是會(huì)報(bào)錯(cuò),這個(gè)我們只要確定我們的方法名是正確的,我們就直接先臨時(shí)寫一個(gè)類不讓其報(bào)錯(cuò)即可,最終結(jié)果就可以了!


image.png
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

友情鏈接更多精彩內(nèi)容