Tôi đang sử dụng GNU để xây dựng một nhóm các thư viện tĩnh, bằng cách sử dụng các quy tắc ngầm để làm như vậy. Các quy tắc này chạy lệnh ar (1) để cập nhật thư viện/lưu trữ. Hồ sơ đã chỉ ra rằng thời gian xây dựng sẽ giảm nếu tôi sử dụng tùy chọn -j để thực hiện để chạy các công việc song song trong quá trình xây dựng.Làm cách nào để tránh các vấn đề tương tranh khi sử dụng GNU tạo các tệp lưu trữ song song?
Thật không may, GNU làm thủ công có một phần http://www.gnu.org/software/make/manual/html_node/Archive-Pitfalls.html rằng khá nhiều nói rằng làm không cung cấp bảo vệ đồng thời để chạy ar (1), và do đó nó có thể (và không) tham nhũng kho lưu trữ. Hướng dẫn tiếp tục trêu chọc rằng điều này có thể được khắc phục trong tương lai.
Một giải pháp cho việc này là sử dụng http://code.google.com/p/ipcmd, về cơ bản thực hiện khóa semaphore trước khi chạy lệnh, do đó tuần tự hóa các lệnh ar (1) tạo lưu trữ. Giải pháp đặc biệt này không tốt cho tôi vì tôi đang xây dựng với các công cụ biên dịch chéo dựa trên mingw trên Windows.
Có giải pháp đơn giản hay tốt hơn cho vấn đề này không?
Tôi nghĩ rằng bạn cần phải chạy kho lưu trữ, chứ không phải objs. Có thể bạn cũng có thể sử dụng $^cho các tệp đối tượng trong các quy tắc. – user1143888