Trong video này, chúng ta sẽ nói về lỗi trình liên kết và lý do chúng có thể xảy ra.
Lỗi trình liên kết xảy ra khi trình liên kết đang cố gắng đặt tất cả các phần của chương trình lại
với nhau để tạo tệp thực thi và một hoặc nhiều phần bị thiếu.
Thông thường, điều này có thể xảy ra khi trình liên kết không thể tìm thấy tệp đối tượng hoặc thư viện.
Sửa lỗi trình liên kết có thể phức tạp.
Đôi khi, vấn đề chỉ là làm cho đường dẫn chính xác để trình liên kết biết vị trí của các
phần còn thiếu.
Hãy bắt đầu với ánh sáng mã và chúng tôi sẽ buộc một chương trình có lỗi trình liên kết để bạn có thể xem thông
báo lỗi trông như thế nào.
Mã ví dụ ở đây, vui lòng bỏ qua cú pháp.
Đây thực sự là mã C plus plus, nhưng nó vẫn liên quan đến lỗi trình liên kết.
Đừng lo lắng về dòng i o.
Đừng lo lắng về stdcout.
Ý tưởng chính ở đây là các lỗi liên kết giống nhau trong C và C plus plus.
Và ví dụ mã hóa ở đây chỉ đang cố gắng chứng minh lại lỗi trình liên kết.
Vì vậy, tôi đang trong quá trình viết mã và tôi đã tạo một dự án có tên là Lỗi liên kết dựa trên mẫu mà chúng tôi sử dụng.
Vì vậy, tất cả những gì tôi có là Main. cpp có nội dung Xin chào thế giới.
Bây giờ chúng tôi sẽ buộc một lỗi liên kết ở đây.
Đây không phải là điều bạn muốn làm bình thường, nhưng tôi muốn làm điều đó để cho bạn thấy lỗi trông như
thế nào.
Vì vậy, những gì tôi sẽ nói là tôi sẽ nói extern int c hoặc hãy nói X và tôi sẽ giải thích tất cả những điều này cho
bạn chỉ sau một giây.
Và sau đó trong phần nội dung chính, tôi muốn thử sử dụng dấu X đó ngay tại đó.
Nó chỉ là một số nguyên và giả sử tôi muốn in nó ra.
Tôi chỉ muốn in ra X, đơn giản như vậy.
Tôi sẽ lưu cái này.
Bây giờ bạn sẽ thấy nếu tôi biên dịch chương trình này, bạn sẽ thấy điều gì xảy ra.
Tôi sẽ nhấp chuột phải vào biên dịch.
Tôi nhận được một biên dịch sạch.
Không có gì sai với chương trình, nhưng khi tôi cố gắng xây dựng và chạy nó.
Bạn có thể thấy lỗi liên kết.
Đây là lỗi liên kết cổ điển.
Tham chiếu không xác định đến một cái gì đó.
Trong trường hợp này, nó chỉ là x.
Ngoài ra, bạn sẽ nhận thấy rằng trình liên kết đã trả lại một cái ở đây.
LD trả về một trạng thái thoát.
Vì vậy, một cái gì đó đã sai với liên kết.
Rõ ràng trình biên dịch vẫn ổn vì chúng tôi không gặp lỗi trình biên dịch nào.
Chúng tôi làm điều đó một lần nữa.
Có biên dịch.
Không có lỗi, không có cảnh báo.
Vì vậy, hãy để tôi giải thích cho bạn những gì đang xảy ra ở đây.
Hãy để tôi lấy bút stylus của tôi ở đây thật nhanh.
Và những gì đang diễn ra ở đây là tôi có tệp CPP chính của mình ở đây và nó sẽ được biên dịch thành dấu chấm 0 chính, giả sử, hoặc đối
tượng dấu chấm chính.
Ở đây, chúng tôi có một tham chiếu đến EXE.
Bạn có thể thấy nó ngay tại đó.
Vì vậy, ở đây tôi có một tham chiếu đến một exe mà tôi sẽ sử dụng.
Bây giờ chúng tôi cũng có các thư viện luồng O của mình, vì vậy trình liên kết cần lấy các thư viện đó và tôi sẽ chỉ nhập
i o luồng ở đây để bạn biết tôi đang nói về điều gì.
Trình liên kết cần đặt hai cái này lại với nhau để tạo exe chính của tôi.
Hoặc trong trường hợp này, tôi tin rằng đó sẽ là lỗi trình liên kết exe.
Nhưng bạn biết ý tôi là gì.
Vì vậy, biên dịch là tốt.
Chúng tôi đã tạo tệp đối tượng của mình.
Thư viện này tồn tại.
Vấn đề là tôi đã nói với trình biên dịch ở đây rằng x này không có trong tôi.
Nó ở một nơi khác.
Nó được định nghĩa bởi người khác.
Chà, rõ ràng là nó không được định nghĩa bởi người khác vì kiểu đó đã đặt ra vấn đề ở đây.
Vì vậy, bây giờ trình liên kết cần giải quyết X đó. Nó nói, được rồi, tôi lấy giá trị đó ở đâu để
in?
Bởi vì đó là những gì bạn yêu cầu tôi làm ngay tại đây, phải không?
Tôi muốn nó in giá trị của x.
x ở đâu?
Nó không thể tìm thấy nó.
Đó là lỗi liên kết.
Đó chính xác là những gì đang diễn ra.
Và hãy để tôi xây dựng lại cái này để bạn có thể thấy thông báo lỗi một lần nữa.
Đó là xây dựng nó và chạy nó.
Và có thông báo lỗi.
Nó nói tham chiếu không xác định đến X.
Bạn có thể thấy chính xác những gì đang xảy ra.
Nó không thể tìm thấy X.
Bây giờ, đây không phải là lỗi trình biên dịch.
Đây là một lỗi liên kết.
Điều đó thực sự quan trọng để hiểu.
Lỗi trình liên kết rất khó khắc phục.
Rất nhiều lần các tệp bạn cần liên kết bị thiếu.
Họ đang ở sai chỗ.
Bạn không phải lo lắng về việc sử dụng code light trong khóa học này, về cơ bản chúng ta sẽ
tự làm mọi thứ.
Nhưng nếu bạn đang sử dụng các thư viện từ bên thứ ba, thì đây là điều mà chúng ta sẽ nói đến trong khóa học
trung cấp hoặc nâng cao hơn.
Nhưng tôi chỉ muốn cho bạn thấy các lỗi của trình liên kết trong trường hợp bạn nghĩ ra một lỗi nào đó, hãy đăng nó lên diễn đàn
và chúng ta sẽ cùng nhau giải quyết.