⑴ 32位(i686)linux的ubuntu,交叉編譯3.0.2的vsftp老出錯
交叉編譯環境或者編譯之前的設置有問題。
當然還一個可能就是 vsftp 對交叉編譯的支持不好。導致調用錯了 so 函數庫文件。
你這個提示明顯的是調用了當前系統的 /lib/libpam.so.0 ,交叉編譯環境,肯定不能調用這個 so 函數庫文件。
⑵ 為什麼好多軟體都區分32位和64位,到底有什麼區別
64位軟體和32位軟體最大的區別是:64位的軟體可以同時操作大於4GB的內存(注意這里的內存指的是地址空間,而不是物理內存)。
但是,上述過過程有幾個非常重要的地方:
1)動態鏈接庫
2)系統API首先,你32位的操作系統上一般是沒有64位的庫文件,如果你的應用程序源代碼中引用了只有64位的動態庫中才有的函數,很顯然你鏈接的時候就會出問題。
另外,我們很多程序肯定用到了read和write等C語言庫函數,而庫函數的實現是依賴於系統API的。如果你工作在windows上,程序大多數是以exe形式發布的,你得到的程序是目標文件以後的結果,本身是帶有位數的;如果你工作在linux上,本身大部分軟體包rpm等也是已經編譯好的,就是說,它們本身就是具有「位數」的。
如果你得到的是源碼,那麼基本上你的應用程序還沒有「位數」的概念,你用多少位的編譯器去編譯它,它就是多少位的應用程序。我們這里討論多少位的程序,都是針對已經編譯到目標文件以後的狀態。所以32位和64位軟體的並存是CPU、系統、編譯綜合決定的,而這些都是因為時代的需要。
對於Windows系統而言,64位的系統上往往有32位的庫和其他必要的信息,基本上能兼容32位的程序。以上是個人的一些經驗和總結,希望可以幫助到大家,如果有不同意見和建議,歡迎評論區留言討論。