Sử dụng gcc (> = 4.8) với OBS (Dịch vụ xây dựng OpenSUSE)


3

Tôi hiện đang sử dụng Dịch vụ xây dựng OpenSUSE ( https://build.opensuse.org/ ) để xây dựng ArangoDB. Tuy nhiên, đối với một số tính năng C ++ mới hơn, tôi cần một trình biên dịch C ++ khá hiện hành. Đối với một số bản phân phối cũ hơn (như Debian6 hoặc CentOS), trình biên dịch mặc định đơn giản là quá cũ.

Tôi khá chắc chắn, phải có một cách để sử dụng trình biên dịch mới hơn với OBS, nhưng tôi đã bị lạc trong tài liệu của OBS. Bất cứ ai có thể chỉ cho tôi đi đúng hướng?

Câu trả lời:


1

Tôi đã làm điều này trong quá khứ cho các thư viện nhưng không xây dựng các công cụ, vì vậy tôi không hiểu tại sao những điều sau không nên làm việc khác sau đó là các vấn đề tương thích nhị phân nếu bạn xây dựng bất kỳ thư viện nào. Như Vitalurr đã chỉ ra đây không phải là một cách tiếp cận lý tưởng và bạn có thể gặp phải các vấn đề nhưng về mặt kỹ thuật có thể thực hiện theo cách này.

Cách mà tôi đã thực hiện điều này là bao gồm gói (trong trường hợp của bạn là GCC) trong dự án của tôi và đặt bản dựng / sử dụng trong bản dựng (trong kho lưu trữ) để chỉ xây dựng cho các kiến ​​trúc không có phiên bản đủ mới.

Tôi cũng sẽ đưa BuildRequires: gcc >= 4.8vào thông số kỹ thuật của bạn để đảm bảo phiên bản mới hơn được chọn nhưng điều đó không cần thiết

Một ví dụ có thể được tìm thấy trong https://build.opensuse.org/project/monitor/X11:Enlightenment:Factory gói luajit chỉ có sẵn trong kho lưu trữ openSUSE: Factory , vì vậy tôi có một bản sao trong kho lưu trữ xây dựng cho mọi thứ nhưng openSUSE: Factory sử dụng cái được cung cấp trong kho lưu trữ ngược dòng.

Trong kho lưu trữ của bạn, bạn có thể phân nhánh gói hiện có , điều đó có nghĩa là bạn có thể tìm thấy một phiên bản gcc đã có sẵn trên obs và sử dụng nó thay vì tạo riêng của bạn.


Tôi đã thử phân nhánh gcc47 vào môi trường RHEL, nhưng có rất nhiều phụ thuộc không thể giải quyết được và cấu trúc cơ bản trông có vẻ quá khác biệt để nó hoạt động.
Zanchey

0

Đúng, bạn đã đúng, OpenSUSE Build Service cho phép bạn xây dựng các gói cho số lượng bản phân phối linux, nhưng KHÔNG , bạn đang nghĩ sai khi sử dụng phiên bản trình biên dịch C ++ cuối cùng cho tất cả các bản phân phối. Ứng dụng của bạn nên sử dụng trình biên dịch và thư viện do phân phối cung cấp và OBS cho phép bạn kiểm tra tính tương thích của ứng dụng với các bản phân phối chính nhất mà không cần phải cài đặt tất cả chúng. Vì vậy, bạn có hai lựa chọn:

  1. làm những việc như mong đợi - kiểm tra các bản phân phối bạn muốn hỗ trợ và điều chỉnh mã của bạn với phiên bản trình biên dịch và thư viện của chúng - ẩn "các tính năng mới" với các khối tiền xử lý cho trình biên dịch mới hơn và viết mã tương thích cho trình biên dịch / thư viện cũ. OBS có thể tự động xây dựng ứng dụng của bạn và hiển thị cho bạn các vấn đề và bạn có thể dễ dàng khắc phục nó.
  2. sử dụng trình biên dịch mới nhất và liên kết tĩnh tất cả các thư viện cần thiết, bao gồm thư viện libgcc và thư viện hiện tại, để không phụ thuộc vào phiên bản trình biên dịch / thư viện phân phối và triển khai gói này trong một gói lớn. Đây là cách được sử dụng chủ yếu bởi các ứng dụng độc quyền và người dùng linux ghét chúng - những ứng dụng này mang đến hệ thống nhiều bản sao của cùng một thư viện và không ai quan tâm đến việc chúng sẽ được cập nhật như thế nào - hãy tưởng tượng, bạn đang sử dụng OpenSSL và liên kết ứng dụng của bạn tĩnh với OpenSSL 1.0.1e, trong đó có lỗi Heartbleed - nhà cung cấp phân phối gửi cập nhật bảo mật, và tất cả các ứng dụng mà sử dụng thư viện phân phối-cung cấp sẽ được an toàn khi người dùng cài đặt bản cập nhật, nhưng ứng dụng của bạn sẽ tiếp tục sử dụng của bạn được liên kết tĩnh không an toànthư viện. Có, bạn có thể tự duy trì tất cả các thư viện cần thiết và cập nhật ứng dụng của mình khi cập nhật bảo mật đã sẵn sàng, nhưng đây là công việc của nhà cung cấp phân phối và bạn sẽ lặp lại công việc khó khăn của họ.

1
Vấn đề là, một số C ++ 11 là một phần của ArangoDB và tôi nghĩ rằng tôi không thể che giấu chúng bằng các định nghĩa. OpenSSL là C (không phải C ++) nên có thể liên kết động đó. Vì vậy, câu hỏi vẫn còn: Làm thế nào để tôi đi với (2).
fceller
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.