Những gói nào nên được xây dựng lại sau khi nâng cấp gcc
trên hệ thống gentoo? Nó có đủ để chạy không
# emerge -a --oneshot `equery depends gcc |awk '{print " ="$1}'`
như đề xuất tương tự cho perl trong Câu hỏi thường gặp này ?
Những gói nào nên được xây dựng lại sau khi nâng cấp gcc
trên hệ thống gentoo? Nó có đủ để chạy không
# emerge -a --oneshot `equery depends gcc |awk '{print " ="$1}'`
như đề xuất tương tự cho perl trong Câu hỏi thường gặp này ?
Câu trả lời:
TL; DR
Tôi có một khác biệt về điều này như là một người dùng Gentoo. Mặc dù tôi đồng ý với cách tiếp cận của peterph về "Hãy để hệ thống quyết định", tôi không đồng ý khi nói đến Cập nhật ABI . Cập nhật ABI đôi khi là một sự thay đổi lớn trong hành vi. Trong trường hợp của GCC 4.7, Thay đổi ABI là việc áp dụng Tiêu chuẩn C ++ 11 mới, mà peterph cũng chỉ ra.
Đây là lý do tại sao tôi viết câu trả lời này. Tôi là một người nghiện tiêu chuẩn. Tôi bắt đầu trong thế giới web khi có khoảng 4 trình duyệt khác nhau và rất nhiều thẻ trong HTML chỉ được hỗ trợ bởi một số trình duyệt nhất định. Vào thời điểm đó, tất cả các thẻ đó làm tăng sự nhầm lẫn và IMO làm cho công việc khó khăn hơn. C ++ đã được chuẩn hóa vì lý do tương tự, trong ngắn hạn để bạn có thể biên dịch mã mà tôi viết và tôi có thể biên dịch mã mà bạn viết . Nếu chúng tôi chọn không tuân theo một tiêu chuẩn, chúng tôi sẽ mất tự do chia sẻ.
C ++ 98 đã được Tiêu chuẩn phê duyệt trong 13 năm. C ++ 11 đã được Ủy ban ISO phê chuẩn vào năm 2011 và được tích hợp hoàn toàn vào GCC 4.7. Xem trạng thái ISO hiện tại và Tiêu chuẩn ISO mới .
Là người dùng của phân phối dựa trên nguồn, chúng tôi có cơ hội duy nhất để định hình hành vi trong tương lai của gói vì chúng tôi biên dịch nó trước khi chúng tôi sử dụng. Như vậy, để chuẩn bị cho cơ hội đó, tôi cảm thấy rằng các lệnh sau nên được chạy, khi cập nhật lên trình biên dịch mới:
emerge -ev system
gcc-config -l && gcc-config *new compiler name*
env-update && source /etc/profile
emerge -1v libtool
emerge -ev system
Hệ thống đầu tiên đi qua hệ thống sẽ xây dựng trình biên dịch mới và phụ thuộc vào trình biên dịch cũ. Hệ thống thứ hai đi qua hệ thống sẽ xây dựng lại trình biên dịch mới và nó phụ thuộc vào trình biên dịch mới. Cụ thể, chúng tôi muốn làm điều này để Chuỗi xây dựng của chúng tôi tận dụng các tính năng mới của trình biên dịch mới, nếu các gói Build Chain cũng được cập nhật ... Một số người thay thế hệ thống thông qua thứ 2 bằng hệ thống thế giới, mặc dù tôi thấy điều này là quá mức cần thiết, vì chúng tôi không biết gói nào đã hỗ trợ tiêu chuẩn mới, nhưng chúng tôi muốn chuỗi xây dựng của chúng tôi hoạt động ổn định.
Làm điều này với ít nhất là bộ hệ thống, chuẩn bị cho chúng tôi kiểm tra mọi gói mà chúng tôi biên dịch theo tiêu chuẩn mới, bởi vì chúng tôi sử dụng một bản phát hành cuộn. Theo cách này, việc thêm -std=c++11
vào CXXFLAGS
sau khi cập nhật chuỗi xây dựng cho phép chúng tôi kiểm tra sự cố và có thể gửi lỗi trực tiếp đến bugzilla của chúng tôi hoặc ngược dòng cho các nhà phát triển thực tế vì lý do đơn giản là:
Xin chào, gói của bạn blah blah phá vỡ bằng cách sử dụng tiêu chuẩn C ++ mới và tôi đã đính kèm nhật ký xây dựng của mình.
Tôi coi đây là phép lịch sự đối với các nhà phát triển, vì giờ họ đã có thời gian chuẩn bị khi tiêu chuẩn trở nên được áp dụng rộng rãi hơn, và tiêu chuẩn cũ bị loại bỏ. Hãy tưởng tượng sự hỗn loạn từ phía nhà phát triển nếu anh ta nhận được hàng trăm lỗi, bởi vì anh ta hoặc cô ta đã đợi cho đến khi tiêu chuẩn được loại bỏ ...
Không có phân phối nào khác mà tôi biết có thể sử dụng phương pháp này vì các nhà bảo trì gói thực sự tồn tại dưới dạng người trung gian trước khi một bản vá hoặc cập nhật có thể được sử dụng bởi cộng đồng người dùng tương ứng. Chúng tôi có người bảo trì, nhưng chúng tôi cũng có khả năng sử dụng một cây portage địa phương.
Tôi không biết tiền thưởng đã được đăng hay chưa bởi vì tất cả các bạn đều thích những câu trả lời sâu sắc, chu đáo của tôi, nhưng trong một nỗ lực tại tiền thưởng, tôi sẽ cố gắng trả lời những lời đề nghị sâu sắc, sâu sắc của bạn. Trước hết, hãy để tôi trả lời rằng với tư cách là người dùng phân phối dựa trên nguồn, tôi tin chắc rằng những gì kết nối các dấu chấm là tất cả những điều bạn đã yêu cầu trong yêu cầu tiền thưởng của bạn. Ai đó có thể là một lập trình viên tuyệt vời, nhưng có sự chăm sóc tào lao cho phần mềm. Theo cùng một cách, có những người là những lập trình viên ngu ngốc, rất quan tâm đến phần mềm.
Trước khi tôi đến đây, tôi là một người say mê, tại Diễn đàn Gentoo . Cuối cùng tôi nhận ra khi tôi bắt đầu đến đây rằng mọi người đều có một mức độ nào đó về tài năng mà họ có thể sử dụng. Đó là những gì họ chọn để làm với nó làm cho sự khác biệt đóng góp. Một số người trong chúng ta là những nhà văn vĩ đại (không phải tôi), vì vậy nếu bạn muốn đóng góp cho dự án nào đó, nhưng bạn không hoặc không thể viết mã, hoặc sửa lỗi, hãy nhớ rằng các nhà văn vĩ đại có thể viết tài liệu tuyệt vời hoặc Bài viết Wiki tuyệt vời .
Tiêu chuẩn là có một lý do khác: Trong một Cộng đồng, các quy tắc nhất định được mong đợi của các thành viên . Thực hiện theo tuyên bố đó ở đây quá. Nếu tôi gửi bản sửa lỗi, bản vá, nâng cao, v.v. và không có tiêu chuẩn, bản vá sẽ chỉ hoạt động trong các tình huống mà tôi cho là quan trọng, tức là nếu tôi đang sử dụng trình biên dịch whizbang 2.0 và bản vá được xây dựng dựa trên trình biên dịch whizbang 1.0, thì nó sẽ thất bại. Vì nỗ lực là vì một cộng đồng, cộng đồng hy vọng mọi thứ sẽ hoạt động trong hầu hết các tình huống, vì vậy thay vì buộc tất cả người dùng nâng cấp lên trình biên dịch 2, tôi có thể quy định trong một tiêu chuẩn:
Gói này chọn cho phép Tương thích ngược với Trình biên dịch Whizbang 1.0
Theo cách này, với tư cách là nhà phát triển, lập trình viên xảo quyệt hay không, tôi biết rằng tôi phải sử dụng hoặc ít nhất là thử nghiệm với Trình biên dịch phiên bản 1.0. Là một người dùng, mặt khác, tôi có thể chọn những gì tôi muốn làm. Nếu tôi không hài lòng, tôi có thể yêu cầu một bản vá, bằng cách gửi một lỗi hoặc cực đoan khác của "Phần mềm này là một thứ nhảm nhí!," Và không làm gì cả. Bất kể, người dùng và nhà phát triển hiểu tiêu chuẩn vì nó đã được viết.
Thu hẹp khoảng cách có tác động của một số hình thức đối với phần của người dùng và điều đó đòi hỏi tất cả những điều bạn yêu cầu tôi và người khác nhận xét, và chúng ta phải dựa vào cộng đồng người dùng và tài năng của tất cả các hình thức để thu hẹp khoảng cách. Nếu bạn chọn trở thành một trong những người dùng đóng góp, tôi hoan nghênh bạn. Đối với những người bạn chọn không hoạt động, hãy nhớ rằng nếu bạn muốn một cái gì đó cố định, những người hoạt động cần đầu vào của bạn. Vì vậy, tôi đang nói với bạn, đừng ngại gửi lỗi, hoặc nói với chúng tôi rằng chúng tôi cần cập nhật tài liệu, và nếu chúng tôi thô lỗ nói với chúng tôi, hoặc tìm người khác, cho đến khi bạn tìm thấy lĩnh vực chuyên môn của mình.
Nó phụ thuộc rất nhiều vào loại nâng cấp trình biên dịch bạn đã làm. Nếu nó là đáng kể, thì mọi thứ sẽ được biên dịch lại *) vì các thay đổi có thể có trong ABI bởi trình biên dịch. Trong nhiều trường hợp, điều đó là không cần thiết, nhưng nếu các gói của bạn phụ thuộc vào thứ gì đó như C ++ 11, thì bạn có thể gặp vấn đề - xem ví dụ như tin tức Gentoo về thay đổi ABI trong GCC 4.7 hoặc GCC bugzilla .
*) Lưu ý nhấn mạnh vào "biên dịch lại" - chắc chắn sẽ không có ý nghĩa gì khi biên dịch lại (đọc xây dựng lại) một ứng dụng Python hoặc Perl vì bạn đã thay đổi trình biên dịch C. Trừ khi nó có một thành phần bản địa là tốt (mà nó cũng có thể).