2010-04-24 37 views
16

Tôi gặp sự cố nhỏ: Tôi phải mở tệp trình liên kết có phần mở rộng là .a. Tôi sử dụng Dev-C++.Cách mở tệp .a

+0

Xin chào Ale, bạn có thể cho chúng tôi thấy những gì bạn đã đưa ra cho đến nay? –

+2

@Mgst: Bạn đang cố gắng đạt được điều gì? –

+0

Bạn có ý nghĩa gì khi "mở"? – zvrba

Trả lời

20

.a tệp là ar lưu trữ (giống như lưu trữ zip) của đối tượng (.o) tệp. Bạn có thể liệt kê các file trong .a tập tin sử dụng ar chương trình:

ar t file.a 

Và giải nén tất cả các file:

ar x file.a 
1

Hãy thử fstream hoặc fstream file_op("c:\\test.a",ios::in); và đừng quên bao gồm fstream.h.

+3

Đó có lẽ là những gì anh ta yêu cầu, nhưng hầu hết có lẽ không phải những gì anh ta thực sự muốn. – Clifford

+2

@Clifford Nhưng đó là vấn đề o câu hỏi, nhưng không phải là câu trả lời. Vậy tại sao -1? –

+3

@ Draco Ater: Tôi đã không bỏ phiếu nó xuống nó (giả định của bạn). Đôi khi một câu hỏi có thể được hỏi mà không có đủ kiến ​​thức kỹ thuật hoặc thuật ngữ chính xác để thể hiện rõ ràng, và tôi nghi ngờ rằng đây là một tình huống như vậy. Dao cạo Occam nên được áp dụng; hãy tự hỏi "Tại sao một người nào đó (đặc biệt là một người mới) muốn * mở * một kho lưu trữ thay vì chỉ * sử dụng nó * theo cách thông thường bằng cách liên kết nó?". Hơn nữa, ông đã đề cập đến IDE được sử dụng, cho thấy ông cần biết cách sử dụng thư viện trong IDE không có trong mã. Đọc nhận xét và câu trả lời của người khác để xem tại sao điều này có thể không phải là câu trả lời. – Clifford

3

Tệp có phần mở rộng là .a là các thư viện tĩnh sử dụng quy ước đặt tên tệp Unix. Chúng không nhiều hơn một bộ sưu tập mã đối tượng được lập chỉ mục. Bạn không mở quá nhiều (trừ khi bạn có một công cụ như nm hoặc gdb có sẵn, cả hai trong số đó có thể thực hiện những điều hợp lý với thư viện nếu không nhất thiết bạn muốn) như yêu cầu trình liên kết sử dụng chúng khi liên kết. Với hầu hết các trình liên kết, điều quan trọng là phải đặt tất cả các thư viện (cả tĩnh và động/chia sẻ) sau mã chương trình chính của bạn trên dòng lệnh trình liên kết và thứ tự các thư viện quan trọng.

+0

nm đặc biệt hiệu quả cho mục đích của tôi. Cảm ơn! – AWrightIV

2

Bạn có thực sự có nghĩa là bạn muốn mở tập tin, hay đúng hơn mà bạn muốn liên kết bằng mã của bạn?

Dev-C++ theo mặc định được cài đặt với trình biên dịch MinGW/GCC. Nếu kho lưu trữ không được xây dựng cụ thể để làm việc với MinGW (ví dụ nó có thể là một kho lưu trữ Cygwin hoặc Linux), bạn sẽ không thể liên kết nó với mã được tạo ra của MinGW.

Nếu lưu trữ là thư viện tương thích MinGW/GCC, thì bạn chỉ cần liên kết nó với mã của bạn. Trong Dev-C++, bạn cần thêm tệp nén vào tùy chọn trình liên kết dự án, bằng cách thêm đường dẫn đầy đủ vào tệp lưu trữ (có nút cho tùy chọn dự án) hoặc bằng cách đặt lưu trữ trong đường dẫn được xác định bởi tùy chọn -L<path> và sau đó thêm tùy chọn -l<archive>. Lưu ý rằng id lưu trữ được gọi là libXXX.a, sau đó tùy chọn -l<archive> sẽ là `-lXXX '; tiền tố "lib" và phần mở rộng ".a" là ẩn.

Nếu bạn chỉ muốn kiểm tra bản lưu trữ để xác định biểu tượng bên ngoài nó cung cấp, thì tiện ích nm có thể được sử dụng cho điều đó. Nếu bạn muốn trích xuất các tệp đối tượng riêng lẻ, hãy sử dụng ar, mặc dù tôi không thể nghĩ ra một lý do chính đáng nào khiến bạn muốn thực hiện.