Một thư viện liên kết tĩnh không thể được nạp tại thời gian chạy nhưng phải được đưa vào tập tin nhị phân của bạn khi bạn liên kết thực thi của bạn. Điều này có nghĩa rằng tất cả các điểm vào mã trong thư viện liên kết tĩnh được xác định rõ và địa chỉ của chúng sẽ không thay đổi liên quan đến sự khởi đầu của mã thực thi của bạn (do đó "tĩnh").
Với thư viện được tải động, không có cách nào để biết mã sẽ ở đâu, vì vậy khi thư viện được tải vào thời gian chạy, cần có một lượng chi phí hiệu năng nhất định để "liên kết" mã đã tải. Về cơ bản, liên kết được hoãn lại cho thời gian chạy, đó là lý do tại sao nó cũng đôi khi được gọi là "ràng buộc muộn".
nào bạn chọn để thực hiện phụ thuộc vào yêu cầu sử dụng của bạn. Nếu bạn muốn một tập tin thực thi độc lập mà người dùng có thể chỉ cần kéo và thả vào thư mục ứng dụng của mình mà không phải lo lắng về các phụ thuộc, liên kết tĩnh các thư viện của bạn có thể là cách để đi.
Nhưng đối với các dự án có quy mô lớn hơn, trong các ứng dụng cung cấp một tấn các chức năng, nó có thể là quá cao và không cần thiết để tải tất cả các chức năng cùng một lúc. Việc cung cấp một bộ thư viện có thể tải động có thể vừa tiết kiệm bộ nhớ vừa rút ngắn thời gian khởi động. Sau đó, khi người dùng truy cập các tính năng, mã có liên quan được tải và các tính năng có thể chưa được sử dụng trong một thời gian có thể được tải xuống.
Ngoài ra, nếu bạn thực hiện thay đổi mã, bạn có thể chỉ cần phân phối lại một hoặc hai thư viện thay vì phải biên dịch lại và liên kết lại và phân phối lại toàn bộ tệp thực thi. Và tôi cần phải đề cập đến triển vọng của plugin?
Sự khác biệt giữa hai mẫu trên là tinh tế. Cả hai biên dịch C theo tiêu chuẩn GNU99. Nhưng mẫu C/C++ Library thiết lập xcode để biên dịch C++ theo chuẩn C++/GNU ++ 0x ". C++/GNU ++ 0x sau đó được chính thức công bố là C++/GNU ++ 11 vào năm 2011. Cả hai mẫu mặc định sử dụng libC++, nhưng STL C++ Template cho phép bạn chọn liên kết với libstdC++ cũ hơn. Tại sao bạn sẽ làm điều này? Nếu mã của bạn liên kết với libC++ nhưng bạn cũng đang liên kết với các thư viện khác tham chiếu libstdC++ và bạn chạy qua các ký hiệu mâu thuẫn, bạn có thể giải quyết vấn đề này bằng cách liên kết với libstdC++. Mẫu thư viện STL C++ cũng cho phép bạn yêu cầu trình biên dịch dính vào chuẩn C++ 11, không bao gồm phần mở rộng của GNU ++ 11, hoặc quay lại C++/GNU ++ 98 (nếu bạn cần biên dịch mã kế thừa, cho thí dụ).
libC++ vs libstdC++ có thể? – Praetorian