為什麼 64 位操作系統的庫目錄要和 32 位不同?

/lib64/

/usr/lib64/

為什麼不統一為/usr/lib/呢?這樣許多軟體(比如PHP)在64位下編譯時就不用那麼麻煩了。

不光Linux如此,Windows也這樣,早期的C:windowssystem後來的C:windowssystem32。

是有什麼特殊的考慮嗎?


因為64bit和32bit生成的lib是不能互換的,所以必須要放到不同目錄下。

為什麼64bit的系統要保留32bit的lib呢,因為要兼容32bit的applications。

為什麼要分目錄,而不是通過不同文件名區分呢,因為在編譯的時候通過編譯開關指定不同的搜索目錄(文件名是一樣的)就能實現編譯64/32bit的application,分目錄更方便。


感覺樓主沒抓到重點,其實你的問題要分幾個問題。

1,為什麼你的系統中有 lib64 這個目錄?

2,為什麼編譯的時候你的 mysql 找不到?

關於第一個問題,實際上系統中有 /lib, /lib32, /lib64 三個目錄,而 lib64 實際上就是指向 lib 的符號連接,故而在 64 位系統中, /lib 仍然是預設。並無變化。

關於第二個問題,為什麼找不到?這個與 Linux 無關,是你的發行版的問題。因為 Linux 本身是自由的,每個發行版自然就對自己的價值取向有著不同的選擇。——什麼,你的系統中 lib64 跟 lib 不是完全相同的目錄?這個,請譴責你的發行版,或者換一個更靠譜的發行版吧。

另外說一下,64 位單獨目錄其實是為了在同一個架構下兼容多個版本用的。因為 64 位系統可以運行 32 位應用程序,32 位應用程序就需要去找 lib32 相關的目錄。——當年之所以存在 system32 ,也是因為 Windows 想要在「同一個系統」中同時兼容 32 位應用程序與 16 位應用程序。——如果你的系統只兼容一種應用,就不需要區分,如果需要兼容多種,就得區分。

順便說一下,當你拿不定主意選擇什麼發行版的時候,通常 debian 不會是個很糟糕的選擇。


因為你看到的「64位系統」並不是pure 64位的,為了兼容32位的系統是需要做區分的。

至於為什麼要這樣分,我只能說這樣簡單。

因為,就目前情況下,絕大多數軟體還是跑在32位下,所以將64位的lib叫做lib64,而32位的不變,仍然叫lib,這樣能最大程度上減少潛在的問題。


這個只是習慣,並非技術必須。

就像有些人習慣 分門別類,有些人習慣 把東西亂扔亂放。

看來程序員大多喜歡前者啊~呵呵~


字寬不同,對齊起來也不一樣啊。

是通過軟鏈接進行調用的吧~


推薦閱讀:

什麼是下一代編譯型語言?
如何編寫將彙編代碼翻譯成機器碼的程序?
clang編譯CUDA程序,為何會生成多個LLVM bitcode文件?
為什麼有了 遞歸, select-case, 約定數據結構(數組) 就可以證明圖靈完備?
另為什麼遞歸如此重要?

C語言或C++語言如何實現尾調用消除?

TAG:Linux | 運維 | 64位操作系統 | 編譯 |