① 涓轟粈涔堝湪linux鐜澧冧笅緙栬瘧java紼嬪簭浼氬嚭鐜癰us_ error閿欒錛燂紵錛
鏈榪戝湪璁哄潧涓婄湅鍒頒竴涓紼嬪簭鍛樺湪璇㈤棶Bus Error鐨勯棶棰樸備粬鏈変竴涓闈炲父綆鍗曠殑嫻嬭瘯紼嬪簭錛屽皢涓涓猻hort鏁扮粍涓絎浜屼釜鎴愬憳鍙橀噺鐨勫湴鍧闄勭粰涓涓猧nt鍨嬬殑鎸囬拡錛屾帴鐫緇欒ユ寚閽堣祴鍊礆紝澶ц嚧浠g爜濡備笅錛
short array[10];
int * p = (int *) &array[1];*p = 1;
榪愯岀殑騫沖彴鏄瘲olaris for SPARC錛屼嬌鐢ㄧ殑緙栬瘧鍣ㄦ槸GCC錛岀▼搴忔墽琛屽埌鎸囬拡璧嬪肩殑鏃跺欑殑鍑虹幇Bus Error鍑洪敊淇℃伅錛岀▼搴廲oremp銆備粬瑙夊緱闈炲父濂囨錛屼唬鐮佸湪X86騫沖彴榪愯岀殑寰堝ソ銆傚叾瀹炶繖涓闂棰樺畬鍏ㄦ槸鐢變簬CPU紜浠朵笉鍚屾墍閫犳垚鐨勩
Bus Error閫氬父閮芥槸鍥犱負闈炲歸綈璁塊棶閫犳垚鐨勩侰PU鍦ㄨ捐′笂涓轟簡鎬ц兘涓婄殑鑰冭檻錛岃佹眰寰呰塊棶錛屾搷浣滅殑鏁版嵁鍦板潃閮借佸歸綈銆傚傛灉鍙戠幇娌℃湁瀵歸綈鐨勮塊棶錛屽氨浼氬悜褰撳墠榪涚▼鍙戝嚭SIGBUS淇″彿錛屼嬌紼嬪簭宕╂簝銆俁ISC鍖呮嫭SPARC閮芥槸榪欑嶇被鍨嬬殑鑺鐗囥傝孹86鏋舵瀯灝辨病鏈夎繖縐嶅歸綈瑕佹眰銆傛墍浠ヨ繖孌典唬鐮佸湪Solaris 10 for X86涓嬮潰娌℃湁闂棰橈紝褰撶劧榪欐槸鏈夋ц兘鐨勪唬浠楓侭us Error涔熸湁鍙鑳芥槸鍥犱負鏈哄櫒鐗╃悊闂棰樻垨鑰呰塊棶鏃犳晥鐗╃悊鍦板潃錛屼絾榪欑嶆儏鍐甸潪甯稿皯瑙併
涓婇潰鐨勪唬鐮佹f槸榪欑嶉潪瀵歸綈璁塊棶閫犳垚鐨凚us Error銆俿hort鏄涓や釜瀛楄妭錛屽叾鍦板潃鍋忕Щ閲忓繀鏄2鐨勫嶆暟銆傝屽逛簬int鎸囬拡鏉ヨ達紝闇瑕佸嚲縐婚噺鍦板潃鏄4鐨勫嶆暟鐨勬暟鎹錛屾墍浠ョ洿鎺ョ敤int鎸囬拡鏉ユ搷浣滃湴鍧錛屽氨寰堟湁鍙鑳藉艱嚧緋葷粺鍙戝嚭SIGBUS淇″彿錛岀▼搴忓穿婧冦
榪欐電▼搴忓傛灉鐢⊿un Studio緙栬瘧鍣ㄧ殑璇濓紝榪愯屽氨娌℃湁闂棰樸傝繖鏄鍥犱負Sun Studio榛樿ゅ32浣嶇紪璇戜嬌鐢ㄧ殑鍙傛暟鏄-xmemalign=8i錛屽叾涓璱閫夐」璁劇疆鏄庣『涓嶄細浜х敓榪欑峉IGBUS淇″彿銆備笉榪囧傛灉緙栬瘧鎴64浣嶇▼搴忥紝Sun Studio浣跨敤鐨-xmemalign=8s錛屽叾涓璼閫夐」璁劇疆鎰忓懗瀵硅繖縐嶉潪瀵歸綈璁塊棶浜х敓SIGBUS淇″彿錛屼粛鏃т細閬囧埌榪欎釜閿欒銆
褰撶劧浣犱篃鍙浠ュ潥鎸佸湪SPARC涓婁嬌鐢℅CC鍘葷紪璇戣繖縐嶄唬鐮併侴CC鏈変竴涓猅ype Attributes鐗規э紝鍦ㄩ渶浜哄伐瀵歸綈鐨勫彉閲忓悗鍔犱笂錛歘_attribute__ ((aligned (4))); 4灝辨槸鎸囧畾鍋忕Щ閲忋傛瘮濡傦細
short array[10] __attribute__ ((aligned (4)))錛
涓嶈繃榪欎釜灞炴у彧瀵筁inker榪炴帴鍣ㄥ彲瑙佺殑鍙橀噺鏈夋晥錛屼篃灝辨槸璇村筶ocal variable鏃犳晥銆傝屼笖榪欑嶇壒鎬у彧鑳界収欏懼埌璇ユ暟緇勶紝鍗崇涓涓鍏冪礌錛屽苟涓嶄負鏁扮粍鐨勬瘡涓鎴愬憳璁劇疆鍋忕Щ閲忋
濡傛灉涓瀹氳侀拡瀵筶ocal variable鎴栬呮暟緇勭殑姣忎釜鎴愬憳榪涜屽嚲縐婚噺璁劇疆錛屽彲浠ヨ冭檻瀹氫箟涓涓猽nion鐨勭被鍨:union {short s;int i;}
② linux64位機器編譯32位程序出現錯誤。
32 和 64 是完全兩個不同的系統。Linux 他們的兼容,完全是基於內核的雙模式切換功能,但是因為是基於內核的。所以 32 和 64 的系統函數庫就還是沒關系。
那麼,你編譯和運行 32 位程序,就需要 64 位的函數庫介面支撐。同樣 64 位程序,也需要 64 位的函數庫提供支撐。
你這個問題,教程只讓你裝了最基本的編譯器環境,但是函數支撐環境全都沒有裝,肯定是還會提示找不到需要的函數庫的。
另外,就算你這個命令裝了需要的函數庫,也肯定只是裝了 64 位的函數庫,32 位庫也沒有裝。那麼編譯 32 位程序也會出現找不到 32 位函數庫的問題的。
你這個問題,我建議你學習兩部分:
1、Linux 的依賴關系;
2、Linux 的 mutilib 相關實現。
我建議,編譯 32 的程序請用純 32 位系統。64 位系統只編譯 64 位的程序。64 位系統只可以運行 32 位程序,不要用來編譯。Linux 裡面隨便找個程序,就會依賴很多的函數庫,這對於編譯器調用來說,會很亂的。
如果真的沒有空閑機器去單獨跑 32 位系統了,我建議要麼是 chroot 環境,要麼是用交叉編譯。不過注意這兩種方式還是需要設置。
③ 我在linux環境下怎麼就是編譯不成功
編譯什麼?編譯內核?編譯軟體?GNU GCC?具體是什麼有具體的方法,但是一般下方法是三步走:
./configure
make
sudo make install clean
基本上就能夠編譯好了,但是有一些編譯的時候有依賴性的軟體包,所以我才說看你要編譯什麼軟體~