導航:首頁 > 源碼編譯 > intel編譯出現問題

intel編譯出現問題

發布時間:2024-04-10 13:06:42

Ⅰ M1 設備的 Xcode 編譯問題深究

在Apple發布M1晶元之前,一直使用Intel的晶元,沒有出現什麼問題。發布M1晶元後,由於兩者架構的不同(M1是arm64架構,Intel是x86_64的架構),導致很多軟體運行出現了問題。我們在M1機型中使用Xcode編譯模擬器時,可能會碰到如下報錯:



這些報錯,都是是由於項目中存在.a或.framework靜態庫導致的。以前,我們創建靜態庫時,會分別打包出一份針對真機(arm64)和模擬器的(x86_64),然後將這兩份合並成一個包後引入項目中進行使用。在Intel機型上,真機上使用arm64指令,模擬器(x86_64)中使用x86_64指令,所以不存在問題。但是在M1機型上,模擬器是以arm64運行的,顯然再以x86_64運行就會出現問題。

對於這類架構報錯問題,網上的資料一般會告訴你兩個解決方案:
以Rosetta模式運行Xcode。
修改Build Settings -> Excluded Architectures選項,添加Any iOS Simulator SDK選項,並設置值為arm64。圖示如下:

這兩種方案都能解決編譯問題,但是也都存在問題。

以Rosetta模式運行是M1機器上x86軟體無法運行的解決方案,它會將x86指令轉譯成ARM指令運行,這種轉譯顯然是存在性能損耗的,損耗大概在20%~30%,不到萬不得已,不推薦使用這種方案。
Excluded Architectures方案說明

修改Excluded Architectures選項也有它的問題。字面意思是排除架構的意思,我們設置在模擬器中排除arm64就能解決模擬器無法編譯arm64的問題。
這樣的設置能生效會讓人有點費解,我們知道,在intel機型上,模擬器本來就是以x86方式運行的,排除arm64毫無影響。但是在M1機型上,模擬器是以arm64方式運行的,排除了arm64反而能跑,這不是把我的智商摁在地上摩擦么?,但是蘋果就是這樣乾的,當在M1機型上,排除了模擬器的arm64架構後,模擬器還是會以arm64的方式運行,但是模擬器中的app是以x86的方式運行的,對蘋果的這個騷操作我們不得不服。圖示如下:

有時候在Excluded Architectures選項中排除了模擬器的arm64指令,依然無法編譯通過,那麼一般是項目設置和cocoapods的設置不一致導致,設置為一致後一般可以解決問題。可以通過在Podfile中添加如下內容來解決:

通過上述內容,我們知道了問題的由來,它是由於項目中存在.a或.framework,它們提供的指令集不完整導致的。Apple對於這類問題,也提供了解決方案,請由我細細道來。

以Xcode13為例,在我們創建靜態庫時,選擇真機編譯出來的包只包含arm64指令,選擇模擬器編譯出來的會同時包含arm64和x86_64指令。我看一些網上的教程,教別人將模擬器部分的arm64移除,其實大可不必。因為要支持M1機器正常跑模擬器,模擬器必須同時包含arm64和x86_64指令。

2019年的WWDC,apple提供了一種新的框架封裝格式XCFramework。簡單理解就是以前使用lipo合並不同指令集的包,現在則使用新的指令合並成XCFramework格式

打包成framework,格式如下:

打包成XCFramework後,格式如下:

從上述可以看出,XCFramework就是把兩個不同指令集的framework放入了同一個文件夾(.xcframework),並生成了一個配置文件Info.plist。這樣生成的XCFramework就可以完美的解決M1機器無法編譯模擬器的問題。
XCFramework的創建指令也很簡單:

以現在的情況,很多第三方框架,並沒有使用XCFramework,而項目中只要有一個框架沒有支持模擬器的arm64指令,那麼在M1機器上,模擬器只能以Rosetta模式運行應用,對這一塊的普遍支持估計要等M1普及以後了。

蘋果換芯,成了開發者們的噩夢?
armv6、armv7、armv7s、armv8、armv64及其i386、x86_64區別
細說iOS靜態庫和動態庫
關於Xcode11的XCFrameworks框架

linux涓嬪畨瑁卛nter緙栬瘧鍑虹幇闂棰橈紝鎵句笉鍒32-bit libraries not found on this system錛岃烽棶鏄鎬庝箞鍥炰簨鍛錛

鐩存帴瀹夎32bit搴
yum鍦ㄧ嚎瀹夎咃細 sudo yum install xulrunner.i686
鎴栬咃細 sudo yum install ia32-libs.i686
ubuntu涓嬶細 sudo apt-get install ia32-libs

Ⅲ 編譯vasp出現錯誤,求幫助,如能幫助,不勝感激

安裝環境centOS6.5+Intel parallel studio xe 2013+openmpi+fftw
這是修改過makefile後make出現的錯誤:
fpp -f_com=no -free -w0 base.F base.f90 -DMPI -DHOST=\\"LinuxIFC\\" -DIFC -DCACHE_SIZE=4000 -DPGF90 -Davoidalloc -DNGZhalf -DMPI_BLOCK=8000 -Duse_collective -DscaLAPACK -DRPROMU_DGEMV -DRACCMU_DGEMV
mpif90 -FR -names lowercase -assume byterecl -O2 -ip -I/opt/intel/composer_xe_2013.2.146/mkl/include/fftw -c base.f90
mpif90: error while loading shared libraries: libimf.so: cannot open shared object file: No such file or directory
make: *** Error 127
這是我的修改過的makefile:
1 .SUFFIXES: .inc .f .f90 .F
2 #-----------------------------------------------------------------------
3 # Makefile for Intel Fortran compiler for Pentium/Athlon/Opteron
4 # based systems
5 # we recommend this makefile for both Intel as well as AMD systems
6 # for AMD based systems appropriate BLAS (libgoto) and fftw libraries are
7 # however mandatory (whereas they are optional for Intel platforms)
8 # For Athlon we recommend
9 # ) to link against libgoto (and mkl as a backup for missing routines)
10 # ) odd enough link in libfftw3xf_intel.a (fftw interface for mkl)
11 # feedback is greatly appreciated
12 #
13 # The makefile was tested only under Linux on Intel and AMD platforms
14 # the following compiler versions have been tested:
15 # - ifc.7.1 works stable somewhat slow but reliably
16 # - ifc.8.1 fails to compile the code properly
17 # - ifc.9.1 recommended (both for 32 and 64 bit)
18 # - ifc.10.1 partially recommended (both for 32 and 64 bit)
19 # tested build 20080312 Package ID: l_fc_p_10.1.015
20 # the gamma only mpi version can not be compiles
21 # using ifc.10.1
22 # - ifc.11.1 partially recommended (some problems with Gamma only and intel fftw)
23 # Build 20090630 Package ID: l_cprof_p_11.1.046
24 # - ifort.12.1 strongly recommended (we use this to compile vasp)
25 # Version 12.1.5.339 Build 20120612
26 #
27 # it might be required to change some of li

閱讀全文

與intel編譯出現問題相關的資料

熱點內容
安卓i怎麼查找蘋果手機 瀏覽:947
雲伺服器宕機概率 瀏覽:227
在線買葯用什麼app知乎 瀏覽:810
ubuntu解壓xz文件 瀏覽:674
宏傑加密時電腦關機 瀏覽:388
自己寫單片機編譯器 瀏覽:598
單片機按鍵閃爍 瀏覽:380
為什麼icloud總是顯連接伺服器失敗 瀏覽:888
如何設置域控伺服器 瀏覽:738
想在上海租房子什麼app好 瀏覽:184
編譯程序各部分是必不可少的嗎 瀏覽:885
編程不超過十行 瀏覽:763
數電編譯器的作用 瀏覽:337
時間演算法與現在有什麼區別 瀏覽:164
7zip解壓後沒文件夾 瀏覽:903
為什麼安卓送玫瑰ios收不到 瀏覽:10
美篇文章加密是什麼意思 瀏覽:84
ilasm編譯dll 瀏覽:40
呼吸燈單片機程序 瀏覽:954
linux域socket 瀏覽:250