2013-04-30 31 views
15

Chúng tôi đã đi qua các điểm được liệt kê trên MSDN WRT đến lỗi này (ngoại trừ # 5). Ba người khác nhau trên các máy khác nhau đang nhận được cùng một vấn đề. PDB được tạo ra, nhưng thất bại ở đâu đó ở giữa.LNK1201 Visual C++ 2010 Dự án lớn không tạo PDB

chi tiết:

  • 67 thư viện tĩnh
  • 4,27 GB bộ thư viện tĩnh
  • 1048575 byte - kích thước của PDB khi mối liên kết không
  • Cặp đôi cuối cùng của MB của PDB là null (zero của)
  • Xây dựng bản phát hành thành công & tạo PDB (chúng tôi đã bật nó, không có thông tin gỡ lỗi trong exe)
  • Xây dựng bản phát hành PDB chỉ dưới 1 GB.

Chúng tôi đã tắt máy quét vi-rút. Xem với procmon.exe và thấy không có sự nghi ngờ tương tác với PDB khi mối liên kết thất bại.

Related question đề xuất ~ 1 GB giới hạn trên PDB - bất kỳ ai/cách xác nhận điều đó?

CẬP NHẬT & SOLUTION:

@Barry và đội crom đã đưa ra giải pháp. Here là bản vá cho hệ thống xây dựng Chromium triển khai độ phân giải.

Chi tiết
Các PDB sử dụng một hệ thống tập tin ảo nội bộ: MSF. Khi trình liên kết tạo tệp PDB, nó sẽ mặc định thành kích thước trang 2 kB (có thể không cấu hình). Rõ ràng & may mắn thay khi trình biên dịch tạo PDB của nó, nó mặc định kích thước trang là 4 kB. Trình biên dịch PDB này có thể được hoisted và được sử dụng làm cơ sở cho PDB của trình liên kết.

Better giải pháp Là một Pre-Link tổ chức sự kiện về dự án đó là liên kết exe hoặc dll bạn, chúng tôi có thể nhấc trình biên dịch để tạo cần PDB ban đầu của chúng tôi:

cl -c "dummy_empty.cpp" /Zi /Fd"$(TargetDir)$(TargetName).pdb" 

gốc Giải pháp
Tạo một dự án thư viện tĩnh C++ với một tệp cpp trống, định cấu hình 'Tên tệp cơ sở dữ liệu Porgram' để xuất kết quả khác với mặc định. Sử dụng một số sự kiện xây dựng dự án (tôi đã sử dụng 'Pre-Link Event') để sao chép trong PDB đã tạo trước đó vào bất cứ nơi nào bạn liên kết mong đợi (xem Linker-> Generate Program Database File) để tạo PDB của nó. May mắn thay, trình liên kết sẽ chấp nhận bản sao chép trong PDB và sử dụng kích thước trang 4 kB của nó. Điều này sẽ mua một số thời gian, và một số không gian cho phép lên đến một PDB 2GB.

+0

Xây dựng gia tăng được biết là gây ra các vấn đề như vậy. Điều này có xảy ra trong suốt quá trình xây dựng lại hoàn chỉnh sau khi làm sạch không? –

+0

Có, nó đang xảy ra về xây dựng và xây dựng lại. Tôi tin rằng liên kết gia tăng là tắt, nhưng chúng tôi đang kiểm tra hai lần. – Zac

Trả lời

6

Có giới hạn tối đa là 1GB cho kích thước pdb. Có một số mẹo để mở rộng số này đến 2GB (thông tin thêm về điều đó có thể được tìm thấy Here). Về cơ bản bạn phải tự tạo tệp pdb ban đầu thay vì trình biên dịch.

Những việc khác bạn có thể làm là thực hiện một số hoạt động cẩu trên mã mẫu của bạn vì điều này cũng có thể ảnh hưởng đến kích thước pdb của bạn.

+0

Liên kết đến các thay đổi có liên quan trong chromium: https://chromium.googlesource.com/experimental/external/gyp/+/9ee1e40e50f3148f691965a0829709f0d25b0412 –

0

Bạn đã cố gắng giảm số lượng bản dựng song song. Một thiết lập nằm trong IDE. Trên VC9, chúng tôi đã có một vấn đề tương tự và giải pháp duy nhất của chúng tôi là giảm số lượng bản dựng cục bộ. Có thể đó là vấn đề về bộ nhớ không? Bạn đang sử dụng VC 10 SP1?

+0

Mọi thứ đều tốt - vì vậy tôi không chắc tại sao biên dịch/MP lại có tác động. Chúng tôi lo ngại rằng trình liên kết đã hết bộ nhớ, nó là một bản dựng 32 bit (32 bit linker.exe). Chúng tôi đang sử dụng SP1. – Zac

5

Tôi đặt cùng một chương trình thử nghiệm với 1000 tệp cpp, mỗi tệp cpp với một hàm, đã tạo ra 500 loại mẫu duy nhất.

Link.exe không thành công khi tệp PDB đạt: 1048575 KB.

Xuất hiện dưới dạng giới hạn cứng ở 1 GB ở định dạng PDB hoặc trong LINK.exe.

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