2009-04-08 20 views
5

Tôi không có kinh nghiệm trong C++, và khi tôi phải làm việc với thư viện khác và tôi gặp lỗi liên kết, tôi hoàn toàn chìm trong bóng tối về những gì trình biên dịch đang cố gắng nói với tôi (ngoài việc không thể tìm thấy một cái gì đó tham khảo một nơi nào đó).Làm thế nào để bạn "giải mã" Lỗi Visual Studio Link?

Có bất kỳ liên kết tốt nào mô tả chi tiết ý nghĩa của ký hiệu và ký tự trong thông báo lỗi liên kết không? Hoặc làm thế nào để rắc rối bắn lỗi như vậy?

Ví dụ, đây là một lỗi liên kết Tôi nhận được thời gian gần đây:

lỗi testproj LNK2019: chưa được giải quyết biểu tượng bên ngoài "công cộng: __thiscall google :: protobuf :: nội :: GeneratedMessageReflection :: GeneratedMessageReflection (lớp google :: protobuf :: Mô tả const *, lớp google :: protobuf :: Thông điệp const *, int const * const, int, int, int, class google :: protobuf :: DescriptorPool const *, int) "(?? 0GeneratedMessageReflection @ nội bộ @ protobuf @ google @@ QAE @ PBVDescriptor @ 23 @ PBVMessage @ 23 @ QBHHHHPB VDescriptorPool @ 23 @ H @ Z) tham chiếu trong chức năng "void __cdecl testproj :: protobuf_BuildDesc_def_2eproto_AssignGlobalDescriptors (lớp google :: protobuf :: đặc tả tập tin const *)" (? Protobuf_BuildDesc_def_2eproto_AssignGlobalDescriptors @ testproj @@ YAXPBVFileDescriptor @ protobuf @ google @@@ Z)

Trả lời

4

Các biểu tượng là phiên bản "xiên" của tên hàm. Về cơ bản vì quá tải C++ (2 hàm có chữ ký khác nhau có thể có cùng tên). Thông tin chữ ký được mã hóa thành tên.

Thư bạn đã dán có cả hai các phiên bản văn bản thuần và được mã hóa.

public: __thiscall google::protobuf::internal::GeneratedMessageReflection::GeneratedMessageReflection(class google::protobuf::Descriptor const *,class google::protobuf::Message const *,int const * const,int,int,int,class google::protobuf::DescriptorPool const *,int) 

[email protected]@[email protected]@@[email protected]@[email protected]@[email protected]@[email protected]@Z) 

là giống nhau, chỉ sau này bị xáo trộn.

Chú ý rằng phiên bản nham nhở bắt đầu với:

[email protected]@[email protected] 

tương ứng độc đáo với:

google::protobuf::internal::GeneratedMessageReflection 

Bởi vì vài dòng đầu tiên cung cấp cho bạn những thông tin có liên quan, bạn có thể khá nhiều bỏ qua các phiên bản đọc sai . Các phiên bản thuần văn bản của chữ ký là đủ để sửa lỗi liên kết.

+0

Tôi hiểu. Có một cài đặt trong studio trực quan để ẩn phiên bản bị xáo trộn không? – scottm

+0

bạn đang sử dụng phiên bản studio trực quan nào? –

+0

Tôi chuyển đổi giữa năm 2003 và 2008 – scottm

2

Unternolved externals có nghĩa là bạn đang cố gắng gọi hàm trong một DLL khác, nhưng bạn chưa liên kết với tệp LIB của tệp DLL đó.

Thường thì việc tìm ra cách giải quyết các lỗi liên kết này là khá đơn giản. Thông báo lỗi cho bạn biết chính xác những gì bạn cần biết:

google :: protobuf :: nội :: GeneratedMessageReflection :: GeneratedMessageReflection (lớp google :: protobuf :: Descriptor const *, lớp google: : protobuf :: nhắn const *, int const * const, int, int, int, lớp google :: protobuf :: DescriptorPool const *, int)"

này trông giống như bạn đang cố gắng sử dụng một lớp có tên "GeneratedMessageReflection" trong thư viện google. t thư viện nào cung cấp lớp này và sau đó đi vào cài đặt trình liên kết trình biên dịch của bạn & thêm "Tham chiếu bổ sung" vào tệp LIB của thư viện đó.

+0

Tôi đã thực hiện điều đó (đã thêm thư mục tệp .lib vào "Thư mục Thư viện Bổ sung"), điều đó có nghĩa là có vấn đề với thư viện? Hoặc, có cách nào khác để tham khảo thư viện mà tôi không biết? – scottm

Các vấn đề liên quan