Tôi đang cố gắng sử dụng một thứ gọi là câu nói đùa Thư viện C trong dự án C của tôi. Cho đến nay tôi đã sử dụng Linux bằng cách sửa đổi .Vì thế
Phim tài liệu Makefile
đã tạo ra một libquirc.dylib.1.0
.
quirc/helloquirc.c
#include
#include
int chính() {
struct quirc *qr;
qr = quirc_new();
nếu (!qr) {
printf("Không cấp phát được bộ nhớ");
}
quirc_destroy(qr);
return 0;
}
Tôi đã tạo các tệp nguồn trên trong thư mục gốc của kho lưu trữ. Tôi đang biên dịch nó bằng lệnh sau:
gcc helloquirc.c -lquirc -L. -Ilib -o helloquirc
Theo sự hiểu biết của tôi,-l
cờ chỉ định tên của thư viện động,-L
Cờ chỉ định vị trí của thư viện động,-TÔI
cờ chỉ định vị trí của tệp tiêu đề,-o
Chỉ định tên của tệp thực thi.
Khi tôi chạy lệnh này, tôi gặp lỗi sau:
ld: không tìm thấy thư viện cho -lquirc
clang: error: linker command failed with exit code 1 (use -v to see invocation)
Tôi đã thay đổi bằng cách sử dụng dòng này Makefile
.PHONY: libquirc.dylib
libquirc.dylib: libquirc.$(LIB_VERSION).dylib
libquirc.$(LIB_VERSION).dylib: $(LIB_OBJ)
$(CC) -shared -dynamiclib -o $@ $(LIB_OBJ) $(LDFLAGS) -lm
và sẽ .so.$(LIB_VERSION)
Các trường hợp thay đổi khác đối với .$(LIB_VERSION).dylib
câu nói đùa
Có điều gì đó không ổn với cách nó được xây dựng. Tên thư viện chính xác phải giống như libquirc.1.0.dylib
, với cái tên được gọi là libquirc.dylib
liên kết tượng trưng.
Có vẻ như quirc có một tệp tạo tệp viết tay thay vì sử dụng thứ gì đó hợp lý như gyp hoặc cmake. Miễn là bạn không cố gắng xây dựng các thư viện dùng chung trên nhiều nền tảng thì các tệp tạo tệp viết tay đều ổn.
Tuy nhiên, nếu bạn tự biên dịch nó, bạn có thể thấy mọi thứ đơn giản hơn nếu chỉ sử dụng thư viện tĩnh. Nếu bạn không chia sẻ thư viện chia sẻ với bất kỳ ai (nếu không có chương trình nào khác đang sử dụng libquirc
củabản sao giống hệt), thì việc có một thư viện dùng chung cũng chẳng ích gì.
Tôi là một lập trình viên xuất sắc, rất giỏi!