Tôi hiện đang làm việc để cập nhật hệ thống xây dựng cho một đống mã lớn, bao gồm dự án Linux C++. Sẽ tốt hơn nếu tất cả các nhà phát triển ở đây có thể chạy xây dựng khi hack xung quanh với ý tưởng của riêng họ, vì vậy tôi đã kiểm tra xem liệu có thể xây dựng hệ thống này trên các hệ thống Linux hiện đại mơ hồ hay không mặc dù hệ thống đích là 2.6.18.GCC/G ++: xây dựng mà không có ký hiệu đối tượng GNU duy nhất cho hạt nhân Linux cũ hơn
Bởi 'mơ hồ hiện đại' Tôi ước tính một cái gì đó giống như GCC 4.5+, một cái gì đó mà một phân phối trong năm qua hoặc hai có thể đi kèm với. Hiện tại, tôi giải quyết vấn đề libstdC++ bằng cách biên dịch tĩnh và bất kỳ vấn đề glibc nào được xử lý gọn gàng bằng cách remapping lên các phiên bản cũ của các ký hiệu memcpy (và vân vân) với một đoạn mã bao bọc nhanh. Càng xa càng tốt. Một vấn đề tôi dường như không thể hiểu được là một số biểu tượng được xây dựng trong tệp thực thi từ các tệp .o thuộc loại 'u', là một đối tượng duy nhất của GNU, một phần mở rộng của tiêu chuẩn ELF mà 2.6.18 dường như không nhận ra. Điều này có nghĩa là tệp thực thi sẽ không chạy vì nó không thể tìm thấy các ký hiệu, mặc dù chúng có trong thực tế (chỉ có kiểu '?' Trên mục tiêu, từ 'nm').
Người ta có thể vô hiệu hóa việc sử dụng các đối tượng độc đáo của GNU khi biên soạn G ++ nhưng nó không chính xác là giải pháp tiện lợi nhất. Tôi không thể thấy bất kỳ cách nào để vô hiệu hóa nó khi biên dịch mã (distro gcc/g ++ lúc nào cũng có tùy chọn này), và tôi tưởng tượng cách duy nhất để hệ thống đích nhận ra nó là cập nhật ld-linux và kernel . Điều đó gần như chắc chắn sẽ không xảy ra.
Có tùy chọn nào mà tôi không tìm thấy để vô hiệu hóa các loại biểu tượng này không? Hoặc có lẽ là có một số cách gọn gàng xung quanh này, hoặc một cái gì đó mà tôi đang mất tích? Tôi bắt đầu nghi ngờ nó sẽ chỉ được biên dịch trên G ++ 4.1.x, điều này có nghĩa là cài đặt hoặc xây dựng Linux cũ từ nguồn.
nếu đây là loại ký hiệu liên kết động, thì sẽ có vấn đề với trình liên kết động chứ không phải hạt nhân. Làm thế nào điều này liên quan đến hạt nhân? – Hibou57
Trong khi tôi chưa thử nó, tôi nghĩ rằng việc thay đổi libld mà không thay đổi hạt nhân sẽ khá khó khăn - nếu nó có thể xảy ra. Vì vậy, nó không liên quan trực tiếp đến hạt nhân, nhưng nhiều hơn thực tế tôi phải biên dịch lại hạt nhân đó hoặc chỉ cần nâng cấp toàn bộ hệ điều hành để có được trình liên kết nhận ra các biểu tượng khác, như tôi đã hiểu. – rhickman