我的發行版(Arch Linux)最近增加了其工具鏈支持的最低Linux內核版本。我正在編譯一個靜態鏈接的Web應用程序,然後上傳到Web服務器,並且Web服務器上的內核版本對於使用新工具鏈編譯的靜態庫來說太舊了。 (當我嘗試在服務器上運行靜態二進制文件時,我遇到了分段錯誤。)有沒有一種方法可以使用GNU工具鏈(GCC,binutils,glibc)來編譯應用程序,從而將需要更新內核版本的功能省略掉?編譯靜態庫時設置較早的最低內核版本
2
A
回答
1
Glibc的兼容性實際上只能保證在一個方向上。 (較舊的二進制文件適用於較新的系統;反之亦然,不一定如此)。
爲了保證您的二進制文件可以在舊系統上運行,請使用舊版glibc編譯鏈接。最簡單的方法是找到一個較舊的發行版,但我建議設置一個「crosstool」或類似的交叉編譯工具鏈,以針對與您的構建系統使用的不同的libc(這允許跨主機重複構建,而不管系統是什麼)。
0
謝謝。我還發現了glibc的--enable-kernel選項,可以使用早期的內核。
相關問題
- 1. 使用較低版本的靜態庫gcc
- 2. z3最低Visual Studio編譯器版本
- 3. 編譯pngquant的靜態版
- 4. 編譯靜態庫內的靜態庫 - 問題
- 5. 無法將當前Java版本設置爲較早版本
- 6. 在靜態編譯到內核的設備驅動程序中查找/編碼版本號
- 7. 編譯版本與最低要求版本Android
- 8. ADA靜態庫 - 兼容不同版本的編譯器
- 9. 版本交叉編譯程序中的靜態庫
- 10. 用預編譯的靜態庫編譯
- 11. 錯誤由於早期非靜態非內聯函數的靜態線版本
- 12. 交叉編譯libstdC++/libgcc的較低版本的目標
- 13. QT靜態庫靜態編譯
- 14. 使用Windows編譯器創建調試版本FFMpeg靜態庫
- 15. 內部版本庫設置
- 16. 針對較低版本的Xcode編譯iOS
- 17. 編譯時遇到靜態庫問題
- 18. iOS:編譯靜態庫
- 19. 靜態庫中斷編譯
- 20. 降低編譯的依賴版本(VB.NET)
- 21. 將較早版本的MSVC版本內置代碼重建爲較新版本可能會遇到的問題
- 22. 哪個Visual Studio版本最早支持64bit編譯?
- 23. 在較低Android版本上避免GLES20編譯錯誤
- 24. 無法在較新版本的Android上編譯使用較早版本的Android構建的應用程序
- 25. Linux內核版本編號
- 26. 有條件編譯.NET的最低版本
- 27. 較低的Android版本
- 28. 編譯內核時出錯
- 29. 鏈接內核模塊的靜態庫
- 30. PHP版本 - 較低版本的難度編碼