MACBOOK M1 PRO 下運行.NET CORE(MAC下如何與X86_64兼容)


 

 

解決“No usable version of libssl was found“

最近調試一個項目,其他都好好地,就是這個項目出現各種詭異的問題,也沒有stack_trace,卡了好久,今天發現最后一行小字No usable version of libssl was found ,終於按圖索驥解決了。

這是一個.net 5.0的項目,開始我挺擔心它在ARM下不兼容的問題,但是可以順利在Rider中成功build並運行,不得不說蘋果的兼容生態和Rider的適配做的太好了,也正是因為這種錯覺才讓我大意了吧,所以如果您使用的是.net6那么可以忽略,6以下請耐心看完。項目運行后點擊登錄程序就退出了,期間沒有任何debug信息,只有一行灰色小字:

 

 

第一次看到這行小字特地用brew 確認了下openssl是否已經安裝,所以放過了它,這里要強調.net1到5都是不支持arm的,之所以能順利build完全是蘋果已經用Rosetta偷偷在背后運行了。

Rosetta

這是蘋果用來兼容x86的轉義器,有了它mac就可以跑x86程序了,驚訝的是幾十M的小東西可以如此穩定高效。正因為有了它,普通用戶完全不需要關心程序是x86還是arm的只接可以運行。當然作為開發需要知道背后的原理,蘋果在x86和arch背后獨立設置了一套生態,用於分別運行相應的程序,所以上面的問題就變成了缺少x86版本的libssl。

X86 HomeBrew

要裝x86的libssl就要先裝x86的HomeBrew,如果你跟我一樣是從原來intel的mbp遷移過來的那它已經安裝好了,如果不是就需要手動安裝,下面是手動安裝的步驟:

$ arch -x86_64 zsh

$ cd /usr/local && mkdir homebrew

$ curl -L https://github.com/Homebrew/brew/tarball/master | tar xz --strip 1 -C homebrew

Alias快捷別名

ibrew='arch -x86_64 /usr/local/bin/brew'
izsh='arch -x86_64 zsh'
azsh='arch -arm64e zsh'

安裝Openssl

ibrew install openssl

記得運行前先用izsh切換到x86環境下,它才會使用Rosetta安裝到x86生態中去,同理可以使用azsh切換回來。

環境設置libssl引用

DYLD_LIBRARY_PATH=”/usr/local/opt/openssl@1.1/lib”

Tips

這里注意的是只要是x86蘋果使用的路徑跟以前一樣都是在/usr/local/bin下,而arch的都是丟在/opt/homebrew/bin下。

前面環境變量最好是在項目文件中設置,這樣不會全局影響到.net6的運行。

參考資料:


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM