Mã của bạn sẽ biên dịch nhưng mã sẽ cung cấp lỗi liên kết.
Xây dựng một thực thi của dự án của bạn liên quan đến hai giai đoạn:
Trong Compilation trình biên dịch chỉ đơn thuần là dịch mã nguồn thành mã đối tượng bằng cách kiểm tra ngữ nghĩa ngôn ngữ .
Trong khi Liên kết trình liên kết thực sự tìm kiếm các định nghĩa của biểu tượng và tạo tệp thực thi từ nhiều tệp đối tượng (được tạo trong quá trình biên dịch).
Trình biên dịch biên dịch mã nguồn trong mỗi đơn vị dịch (.cpp + tệp tiêu đề) một cách riêng biệt và do đó nó giả định định nghĩa phải có mặt trong một số tệp nguồn khác. Nó là Linker, người cố gắng tìm các tham chiếu đến các định nghĩa hàm, và do đó định nghĩa bị thiếu sẽ được báo cáo bởi trình liên kết.
Lưu ý rằng các mối liên kết cần phải liên kết chỉ những biểu tượng đó là sử dụng bởi chương trình của bạn,
Đối với ví dụ: Nếu chương trình của bạn tuyên bố một chức năng, cung cấp không có định nghĩa & sau đó không bao giờ sử dụng/gọi chức năng ở bất cứ đâu, trình liên kết không cần nhúng mã để nhảy tới địa chỉ nơi mã đối tượng của hàm nằm ở bất kỳ trang web gọi hàm nào.
Với trường hợp như vậy, trình liên kết sẽ không bao giờ cần tìm kiếm định nghĩa hàm. Do đó mã sẽ biên dịch và liên kết.
Nguồn
2012-02-09 11:26:03
IMHO, Lỗi liên kết sẽ chỉ xảy ra nếu hàm thiếu định nghĩa đang được sử dụng/được gọi rõ ràng/ngầm ở đâu đó. – fizzbuzz
@fizzbuzz: Có, ofcourse. Đó là tiêu chí cơ bản. –
Tôi không nhận được bất kỳ lỗi biên dịch hoặc liên kết nào. Chỉ cần thêm tôi không sử dụng chức năng ở bất cứ đâu. Mã biên dịch và liên kết tốt thành tệp .lib. – akrohit