Debian
從 Debian 到 Ubuntu 的二進制執行檔?
我在 Debian 上用 gcc 4.9 編譯了一些大型 c++ 程序。我想知道可執行二進制程式碼在 ubuntu 上是否兼容且安全,還是必須在 Ubuntu 上重新編譯程序?
問題在於在所有目前 Linux 中普遍存在的核心庫 - glibc。它包含一個稱為“符號版本控制”的“功能”,它增加了在 libc 共享庫中擁有多個標準函式的多個版本的能力,並支持 glibc 附帶的庫。
例如,您生成的二進製文件可能取決於“GLIBC_2.15”符號版本,而您的目標系統最多提供“GLIBC_2.14”。然後你會得到一個致命的錯誤資訊,僅此而已。
一些 glibc 版本甚至拒絕在舊核心甚至硬體上執行,但這種情況很少見。
使用 glibc,靜態編譯也不是一種選擇(如果您考慮過的話),因為某些 glibc 部分甚至可能需要來自靜態程序的動態庫(在編譯和連結期間,如果它發生,您將收到警告)。
如果您需要使一個二進製文件在多個系統上執行,則需要使用另一個 libc。如果您只想讓一個二進製文件在其他系統上執行,最好在該系統上重新建構它。
在某些情況下(不適用於 glibc),如果您的目標非常慢,您可以複製已編譯的原始碼樹,觸摸所有對象 (*.o) 文件並刪除二進製文件。然後執行
make
只會重新連結它。另請注意,許多(但不是全部!)第三方庫也可以強制執行符號版本控制要求,這也適用於它們。