我目前正在更新構建系統一大堆的代碼,這恰好包括一個Linux C++項目。如果這裏的所有開發人員都可以在構建自己的想法時進行構建,那麼我會考慮是否可以在隱約現代的Linux系統上構建這個系統,儘管目標系統是2.6.18。GCC/G ++:沒有GNU唯一對象符號建設老版本的Linux內核
通過「隱約現代」我估計像GCC 4.5+的東西,在過去的一年或兩年分佈可能配。目前,我通過靜態編譯來解決libstdC++問題,並且任何glibc問題都可以通過重新映射到舊版本的memcpy符號(等等)和快速包裝代碼來巧妙地解決。到現在爲止還挺好。
我似乎無法完全弄清楚的一個問題是,從.o文件構建到可執行文件中的某些符號的類型爲'u',它是GNU獨特的對象,是ELF標準的擴展2.6.18似乎完全不承認。這意味着可執行文件不會運行,因爲它找不到符號,儘管它們實際上存在(只是'nm'中目標'?'的類型)。編譯g當
人們可以禁止使用GNU唯一對象++,但它並不完全是最方便的解決方案。編譯代碼時,我看不到任何方法禁用它(distro gcc/g ++總是有這個選項),我想想讓目標系統識別它的唯一方法是更新ld-linux和內核。這幾乎肯定不會發生。
有沒有我還沒有發現禁用這些符號類型的選項?或者也許有一些乾淨利落的方式,或者我錯過了什麼?我開始懷疑它只能在G ++ 4.1.x上編譯,這將意味着一箇舊的Linux安裝或源代碼編譯。
如果這是一個動態鏈接符號類型,那麼動態鏈接器應該存在問題,而不是內核。這與內核有什麼關係? – Hibou57 2013-04-18 02:09:52
雖然我還沒有嘗試過,但我認爲在不更改內核的情況下更改libld會非常困難 - 如果可能的話。所以它與內核沒有直接關係,但更多的是我必須重新編譯內核,或者只是升級整個操作系統以讓鏈接器識別這些其他符號,據我所知。 – rhickman 2013-04-25 11:59:48