2012-05-04 43 views

Trả lời

1

Tệp .a là thư viện, đã được biên dịch. Bạn biên dịch tệp .c của bạn thành .o, sau đó bạn sử dụng trình liên kết để liên kết .o của bạn với .a để tạo tệp thực thi.

+3

Không trả lời câu hỏi về cách * cách thực hiện. Không nói "nó trông như thế nào". – mtahmed

14

Đối với trường hợp đơn giản, bạn có lẽ có thể làm điều này:

gcc -o maybe.exe useful.a something.c 

Makefiles cho các dự án không tầm thường thường đầu tiên gọi gcc để biên dịch mỗi file .c đến một đối tượng .o.

gcc -c something.c 

Sau đó, họ gọi trình liên kết (những ngày này thường sử dụng gcc làm trình bao bọc) với danh sách tệp .o và .a để liên kết thành tệp thực thi.

gcc -o maybe.exe useful.a something.o 

Cũng lưu ý rằng cho các thư viện cài đặt nhất, đó là điển hình không xác định rõ ràng file .a nhưng thay vì nói -lhandy đó sẽ là viết tắt của "cố gắng tìm một cái gì đó gọi là libhandy.a trong cấu hình (hoặc chỉ định với -L) thư mục tìm kiếm"

+0

Nhờ ẩn danh để bắt lỗi trong việc tạo tập tin đối tượng –

4

*.a là một thư viện tĩnh và không năng động (*.dll trong các cửa sổ và *.so trong linux)

gcc -L<here comes the library path> -l<library name> 

ví dụ cho các tập tin bạn có libname.a trong hiện tại đường dẫn mà bạn nên sử dụng:

gcc *.c -L. -lname -o myprogram.o 

từ man (đưa người đàn ông gcc trong command prompt shell)

Bạn có thể kết hợp tùy chọn và lập luận khác. Đối với hầu hết các phần, thứ tự bạn sử dụng không quan trọng. Đặt hàng không thành vấn đề khi bạn sử dụng một số tùy chọn cùng loại; ví dụ: nếu bạn chỉ định -L nhiều lần, các thư mục sẽ được tìm kiếm theo thứ tự được chỉ định. Ngoài ra, vị trí của tùy chọn -l là đáng kể.

+0

Thay đổi 'gcc -L <ở đây có đường dẫn thư viện> -l ' từ 'gcc -l <ở đây có đường dẫn thư viện> -l '. Hy vọng đó là những gì bạn có nghĩa là –

+0

Tại sao bạn sử dụng '-lname' nếu thư viện là' libname.a'? – this

+0

Đọc http://gcc.gnu.org/onlinedocs/gcc/Link-Options.html – 0x90

Các vấn đề liên quan