2009-11-10 9 views
24

Tôi sử dụng mã :: khối để biên dịch thư viện tĩnh của tôi. Kết quả đầu ra là một tập tin libstatic.a. Bây giờ, làm cách nào để liên kết tới thư viện của tôi để sử dụng các hàm được biên dịch?Làm thế nào để liên kết đến một thư viện tĩnh trong C?

(Tôi cố gắng để sử dụng #include "libstatic.a" nhưng dự án của tôi không biên dịch)

Trả lời

42
cc -o yourprog yourprog.c -lstatic 

hoặc

cc -o yourprog yourprog.c libstatic.a 
+0

tôi đã thử thứ hai và nó hoạt động. cảm ơn. tôi cũng có thể cấu hình cho code :: blocks để làm việc. :-) – root

7

Bạn nên #include "libstatic.h", tức là sử dụng các tập tin tiêu đề thích hợp trong mã của bạn (đó là lý do tại sao mã của bạn doesn' t biên dịch) và bao gồm đường dẫn đến libstatic.a trong tùy chọn trình liên kết làm một trong các thư viện đầu vào của bạn.

Điều này webpage có một số ví dụ về liên kết đến thư viện tĩnh, ví dụ:

gcc -I. -o jvct jvct.c libjvc.a 
+0

cảm ơn bạn. cuối cùng tôi đã nhận nó được thực hiện trên codeblocks và tôi đã tìm ra rằng #include. h tập tin không cần thiết cùng tên với tập tin .a. – root

2

tôi phải thiết lập đường dẫn thư viện trong makefile của tôi. Đối với trường hợp này, bạn có thể sử dụng:

gcc -o myapp main.c -L. -lstatic 
1
gcc -I. -o jvct jvct.c libjvc.a 
0

Để liên kết hoàn toàn tĩnh, sử dụng -static

cc -static yourprogram.c libstatic.a 
+0

Lưu ý rằng điều này sẽ làm cho trình biên dịch liên kết tĩnh với các thư viện _all_, bao gồm libc và sẽ tạo ra nhị phân được liên kết tĩnh. Nó có thể là những gì bạn muốn (hay không). – WGH