Tôi đang cố tạo một thư viện tĩnh chứa các tệp đối tượng và các thư viện tĩnh hiện có đã được biên dịch trước đó trong quá trình xây dựng. Có một cách dễ dàng để làm điều này bằng cách sử dụng "ar", hoặc tôi sẽ cần phải giải nén (ar x library_name) mỗi thư viện và thêm các tập tin đối tượng của nó vào thư viện thống nhất của tôi?Sử dụng "ar" để kết hợp các tệp .o và .a (Linux)
Trả lời
Bạn sẽ cần giải nén tệp đối tượng từ các thư viện khác và gộp các tệp đối tượng được trích xuất vào thư viện tổng hợp của mình.
Cũng xem xét tải gia tăng: ld -r
Nếu bạn muốn tạo một thư viện chia sẻ mà bạn có thể sử dụng này:
Bạn có thể sử dụng --whole-archive cờ từ ld:
--whole-archive
Đối với mỗi tệp lưu trữ được đề cập trên dòng lệnh sau tùy chọn --whole-archive, bao gồm mọi tệp đối tượng trong lưu trữ trong liên kết, thay vì tìm kiếm tệp lưu trữ cho các tệp đối tượng được yêu cầu. Điều này thường được sử dụng để biến một tệp lưu trữ thành một thư viện được chia sẻ, buộc mọi đối tượng phải được bao gồm trong thư viện được chia sẻ kết quả. Tùy chọn này có thể được sử dụng nhiều lần.Hai ghi chú khi sử dụng tùy chọn này từ gcc: Đầu tiên, gcc không biết về tùy chọn này, vì vậy bạn phải sử dụng -Wl, -whole-archive. Thứ hai, đừng quên sử dụng -Wl, -no-whole-archive sau danh sách lưu trữ của bạn, bởi vì gcc sẽ thêm danh sách lưu trữ của riêng nó vào liên kết của bạn và bạn có thể không muốn cờ này ảnh hưởng đến chúng.
Đối với thư viện tĩnh, trước tiên bạn có thể phải trích xuất đối tượng.
Tôi tìm thấy sau cho ar
gnu ar có thể tùy chọn tạo một kho lưu trữ mỏng, trong đó có một chỉ số biểu tượng và tài liệu tham khảo cho các bản gốc của file thành viên của tài liệu lưu trữ. Một kho lưu trữ như vậy rất hữu ích cho việc xây dựng các thư viện để sử dụng trong một xây dựng cục bộ, nơi các đối tượng relocatable được mong đợi vẫn còn, và sao chép nội dung của từng đối tượng sẽ chỉ lãng phí thời gian và không gian. Lưu trữ mỏng cũng được làm phẳng, do đó việc thêm một hoặc nhiều lưu trữ vào một kho lưu trữ mỏng sẽ thêm các phần tử của kho lưu trữ lồng nhau riêng lẻ. Các đường dẫn đến các phần tử của kho lưu trữ được lưu trữ tương đối so với bản lưu trữ.
Có thể bạn có thể sử dụng kho lưu trữ mỏng .
Lưu trữ lưu trữ luôn có thể. Tôi đã không kiểm tra nếu nó hoạt động khi API thực tế đang được gọi từ việc thực hiện.
Ex: ar rc lib1.a obj1.o ar rc lib2.a obj2.o ar rc lib3.a lib1.a lib2.a
you can check the contents of lib3.a by trying out.
ar x lib3.a which would extract lib1.a and lib2.a
Nhưng bạn cần phải xây dựng gọi API từ obj1.o và obj2.o. Sau đó, không cần phải trích xuất các tệp đối tượng từ lưu trữ riêng lẻ.
Hy vọng điều đó sẽ hữu ích!
- 1. .o tệp vs .a tệp
- 2. Tại sao tạo tệp .a từ .o để liên kết tĩnh?
- 3. kết hợp nhiều tệp pdf trong linux bằng cách sử dụng tập lệnh?
- 4. Kết hợp cờ -v và cờ -A trong grep
- 5. Làm cách nào để liên kết tệp .o bằng g ++
- 6. Sử dụng python để viết các tệp văn bản với dòng kết thúc DOS trên linux
- 7. Có thể sử dụng .dll trên Linux
- 8. Sử dụng lệnh Unix JOIN để hợp nhất hai tệp
- 9. Kết hợp các tệp RTF
- 10. howto kiểm tra C++ .o tệp dưới linux?
- 11. Sử dụng kết hợp "đầu" và "đuôi" để hiển thị dòng giữa của tệp trong Unix
- 12. Phát hiện các tệp được liên kết và không sử dụng và JavaScript chưa sử dụng
- 13. Thu nhỏ và kết hợp các tệp trong .net
- 14. I/O không được lọc trong Linux
- 15. Git cam kết -a "các tệp không được theo dõi"?
- 16. Kết hợp các thư viện tĩnh
- 17. Bộ tách rời Mach-O của Linux
- 18. lệnh để biên dịch các tệp c có tệp .a
- 19. kết hợp các tệp âm thanh và video riêng biệt thành một tệp C++
- 20. Làm cách nào để kết hợp và nén nhiều tập lệnh và tệp css để sử dụng sản xuất?
- 21. Kết hợp các tệp trong PHP
- 22. Kết hợp 2 tệp AAC bằng cách sử dụng Java
- 23. Kết hợp các tệp .js với CDN
- 24. tệp jar để sử dụng rsync để tải lên và tải xuống tệp trên máy chủ linux
- 25. Làm cách nào để tạo tất cả các kết hợp có thể có của một chuỗi có dấu cách giữa các ký tự? Python
- 26. Kết hợp hai tệp trong các thư mục khác nhau trong Linux
- 27. Cách sử dụng ditto trên OS X để hoạt động như cp -a trên Linux
- 28. Makefile để kết hợp các tệp js và tạo một phiên bản nén
- 29. Trích xuất tệp đối tượng (* .o) từ thư viện tĩnh iPhone
- 30. Java I/O so với Java I/O mới (NIO) với Linux NPTL
Có thể trùng lặp http: // stackoverflow.com/questions/386579/pack-shared-libraries-into-the-elf –
Không, không trùng lặp. Câu hỏi đó đề cập đến việc cố gắng liên kết lại với các thư viện được chia sẻ, trong khi câu hỏi này đề cập đến các thư viện tĩnh và các đối tượng chưa được liên kết. – ephemient
Nếu bạn kiểm soát quá trình xây dựng, mẫu này có vẻ như một giải pháp sạch: http://stackoverflow.com/a/4318960/78342 – Chinasaur